• 締切済み

intとcharの配列のアドレスについてとポインタのときとの比較

int a[0]~a[2]とcharc[0]~c[2]のアドレスを表示するプログラムとさらにintとcharのポインタの場合のアドレスを表示するプログラムを作って結果から違いを考察しなさいみたいな問題を出されたのですが、良くわかりません。 どなたかわかる方がいましたらプログラムと解説をお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

>ポインタの値表示って、%p じゃありませんでしたっけ? そうですね、 encyさん、Tacosanさん、ご指摘ありがとうございました。 処理系によっては%pって使えないのじゃないかとか思っていました。 ご指摘の通り、大抵の処理系では、同じ結果になると思いますが、場合によっては、違う結果になることもあると思います。

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.5

int a[3]; int *b; b = a; printf( "a : %p\n", a ); printf( "b : %p\n", b ); printf( "&a[0] : %p\n", &a[0] ); printf( "&a[1] : %p\n", &a[1] ); printf( "&a[2] : %p\n", &a[2] ); printf( "a + 0 : %p\n", a + 0 ); printf( "a + 1 : %p\n", a + 1 ); printf( "a + 2 : %p\n", a + 2 ); printf( "0 + a : %p\n", 0 + a ); printf( "1 + a : %p\n", 1 + a ); printf( "2 + a : %p\n", 2 + a ); printf( "&0[a] : %p\n", &0[a] ); printf( "&1[a] : %p\n", &1[a] ); printf( "&2[a] : %p\n", &2[a] ); printf( "&b[0] : %p\n", &b[0] ); printf( "&b[1] : %p\n", &b[1] ); printf( "&b[2] : %p\n", &b[2] ); printf( "b + 0 : %p\n", b + 0 ); printf( "b + 1 : %p\n", b + 1 ); printf( "b + 2 : %p\n", b + 2 ); printf( "0 + b : %p\n", 0 + b ); printf( "1 + b : %p\n", 1 + b ); printf( "2 + b : %p\n", 2 + b ); printf( "&0[b] : %p\n", &0[b] ); printf( "&1[b] : %p\n", &1[b] ); printf( "&2[b] : %p\n", &2[b] );

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

ポインタの表示は %p ですね. ILP32 なら %x でもいいんですが, LP64 だとはまるような気がします. で, 多分 T *p; に対して p+1 の値が sizeof (T) だけ p から離れているってことを言いたいんじゃないかなぁ?

  • ency
  • ベストアンサー率39% (93/238)
回答No.3

ポインタの値表示って、%p じゃありませんでしたっけ? printf( "%p\n", &hoge ); /* hoge へのポインタ値表示 */ ポインタの値を表示させると、大抵アドレス表示になると思いますし、%X でも同じ結果になるとは思いますが。。。 # 「ポインタ表示に %X を使うのは間違いだ!」と力説している # 何かを見た覚えがあったものですから。。。 ところで、この問題の主旨は、「配列とポインタは別物だ」ということを理解してもらいたい、ということでしょうか?

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

int とcharはメモリ上のサイズが違うってな感じですかね~。 はっきりいってだからなんなんだ?って問題ですが、 『プログラムを作って結果から違いを考察しなさい』 っていうんだから、作って、考察しましょう! アドレスは &a[2]みたいな感じで取り出せるし printf("%X",アドレス); みたいな感じで表示できますよ。

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.1

それは、 「int a[0]~a[2]とcharc[0]~c[2]のアドレスを表示するプログラム」と 「さらにintとcharのポインタの場合のアドレスを表示するプログラム」 を作ってみたらわかるんじゃないでしょうか。 これらの作り方がわからないとか、そもそも問題の意味がわからないのでしたら、ここの掲示板でなく、教わっている先生にそう言ったほうがいいですよ。 会社の新人研修で講師をしていますが、問題の内容でなくて、問題の意味がわからないというのは、教える側が悪いのです。