Cの本では、配列num[7]
の場合、num
という語は&num[0]
に相当します。このコンセプトは私のためにうまくいきましたが、私がこのプログラムを書いたときに私は再び混乱しました。`num num [7]`を指定すると、 `num`、`&num [0] `、`&num`はどのように違いますか?
#include<stdio.h>
#include<conio.h>
int main()
{
int num[]={21,22,23,24,25,26,27};
int *x,*y,*z;
x=#
y=num;
z=&num[0];
printf("%d %d %d\n",sizeof(x),sizeof(y),sizeof(z));
printf("%d %d %d\n",sizeof(&num),sizeof(num),sizeof(&num[0]));
printf("%d %d %d",*(&num),*(num),*(&num[0]));
getch();
return 0;
}
出力は次のようになります。
4 4 4
4 28 4
2293536 21 21
num
が&num[0]
と同じであれば、その大きさに差がある理由は?そして、この第3の種類の用語は何ですか&num
?私はそれがゴミ値を示していることを知っていますが、このタイプの用語は意味をなさないでしょうか? z=&num[0]
私はすでに理解しています。コンパイラは、割り当てx=&num
の警告を表示しますが、y=num;
の場合、コンパイラには問題はありません。 num
のサイズが28
の場合、なぜタイプ変換なしで整数ポインタy
に割り当てられましたか?
その後、私は2次元配列にこの方法を試してみました:
#include<stdio.h>
#include<conio.h>
int main()
{
int s[4][2]={{1234,56},{1235,57},{1236,58},{1237,59}};
int i
printf ("\n%d %d %d %d %d",sizeof(s[i]),sizeof(&s[i]),sizeof(s),
sizeof(s[0][0]),sizeof(&s));
getch();
return 0;
}
今、出力はここ
8 4 32 4 4
sizeof(s[i])
では8
です。 s[i]
は1次元配列であり、2つの要素を持っているので大丈夫です。しかし、私は、用語&s[i]
と&s
が何を意味するのか全く分かりません。そして私はs
がs[0][0]
と同じではないことを再び見ることができます。私はすべてのプログラムを実行するためにDev C++ 4.9.9.2バージョンを使用しました。私はこれらの3つのタイプの用語で明確になりたい。
この問題に専念セクション全体持つCよくあるご質問お読み:初心者のためのhttp://c-faq.com/aryptr/index.html – AnT
@good質問!バディ – niko