• ベストアンサー

ポインタの配列

int str[10]; int i; for(i=0;i<10;i++){ printf("str[%d]...%p",i,&str[i]); } だと配列ですから連続したアドレスが得られますが、 int *str[10]; int i; for(i=0;i<10;i++){ printf("*str[%d]...%p",i,&*str[i]); } だと不連続なアドレスが得られます。なぜでしょうか?なんとなく連続になりそうな気がしますが。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

こうすれば連続したアドレスを得ます。 質問者さんは、ポインタの配列要素それ自身のアドレスと、 ポインタの配列要素の中身(どこかのアドレス、という値)が ごちゃ混ぜになっているようです。 #include <stdio.h> int main(void) { int *str[10]; int i; for (i = 0; i < 10; i++) { printf("&str[%d]...%p\n", i, &str[i]); } return 0; }

szatmari
質問者

お礼

回答ありがとうございます。助かりました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

> printf("*str[%d]...%p",i,&*str[i]); &*は対消滅するので、蛇足ですね。 printf("*str[%d]...%p",i,str[i]); と同じ意味になります。 >だと不連続なアドレスが得られます。なぜでしょうか?なんとなく連続になりそうな気がしますが。 str[i]を宣言している個所はありますが、初期化している個所が見当たりません。 変数は参照する前に初期化しましょう。 初期化していない変数には、意味のないゴミが入っています。

szatmari
質問者

お礼

回答ありがとうございます。初期化されてないごみのアドレスを見ていたのですね。

すると、全ての回答が全文表示されます。

関連するQ&A