ページ 11

ポインタの値

Posted: 2006年12月07日(木) 18:05
by mika
ポインタを習い始めましたが、よく分からないので質問させてもらいます。
いろいろやってみたのですが独学なので本当に困っています。
どうかお願い致します・・・

問題は↓のようなものです

以下のプログラムを実行した場合に、各変数の値は①~④の時点で順次どの
ような値になっているか。
ただし、32bit処理系で実行しているものとし、n[0]、n[1]、・・・は夫々
0x1000番地、0x1004番地、・・・に存在するものとする。

/********************************************************************/
int n[7] = {0,1,2,3,4,5,6}; /* int型の配列を宣言し初期値を設定 */
int *p; /* ポインタ変数を宣言 */

p = &n[0]; /* ポインタ変数を初期化 */
*p = 5; /* ポインタを利用して値を変更 */

/* ①この時点で、pの値とn[0]~n[6]の各値は何か? */

p++; /* ポインタ変数をインクリメント */
*p = 6; /* ポインタを利用して値を変更 */

/* ②この時点で、pの値とn[0]~n[6]の各値は何か? */

p = &n[5]; /* ポインタ変数の値を変更 */
*p = 7; /* ポインタを利用して値を変更 */

/* ③この時点で、pの値とn[0]~n[6]の各値は何か? */

p -= 2; /** ポインタ変数を2減算 /
*p = 8; /* ポインタを利用して値を変更 */
*(p+3) = 9; /* ポインタを利用して値を変更 */

/* ④この時点で、pの値とn[0]~n[6]の各値は何か? */
/********************************************************************/

Re:ポインタの値

Posted: 2006年12月07日(木) 18:40
by keichan
①~④の時にprintfでそれぞれ表示されてみてはいかがですか?

ヒント:
ポインタを表示するには printf("%p", p);
値を表示するには printf("%d", n[0~6]);

Re:ポインタの値

Posted: 2006年12月07日(木) 19:10
by mika
今までポインタを表示するのに%dを使っていました>_<”
%pということが分かったので解決しました!
アリガトウございます。

Re:ポインタの値

Posted: 2006年12月08日(金) 00:01
by 管理人
解決されたようでよかったです。
プログラムを書いていると優先度に悩まされたりするのでちょっとご紹介。


まちがい
#include <stdio.h>

int main()
{
	int a=3,*b;

	b=&a;
	*b++;

	printf("%d\n",*b);

	return 0;
}
こちらと


正解
#include <stdio.h>

int main()
{
	int a=3,*b;
	b=&a;
	(*b)++;
	printf("%d\n",*b);

	return 0;
}

これでは表示されるものが全然違うはずです。
がんばってくださいね。