arr
配列のコンテキストでポインターをかなり理解しarr
ていると思ってリラックスしていたとき、私はこの次のプログラムについて再びひっくり返りました&arr
。しかし、次のプログラムの出力をしっかりと把握できていません。視覚化しようとしましたが、部分的にしか成功しませんでした。私のような人がこの混乱を乗り越えられるように、このことについて厳密で詳細な説明をいただければ幸いです。永久に。
次のプログラムでは、「2D」配列を使用しました。サイズが 2になることはdemo[][2]
わかっています。また、単独で使用すると 型になることもわかっています。それでも、次のことについて迷っています。demo[]
array of arrays
demo
(*)[2]
1)なぜ&demo[1]
同じですか? 2 番目の配列のアドレスであるはずでdemo[1]
はありませんか?では、一体何が何で、なぜ 2 番目の配列のアドレスと同じなのですか?demo[1]
&demo[1]
2)printf()
2 番目と 4 番目が同じであることは知っていますdemo[1]
が、それ*(demo+1)
は. (デモ+1) ? が と同じであることはよく知られていますが、どのようにして と等しいのでしょうか? 「何か」がその「何か」の値とどのように等しくなることができますか?printf()
demo[1]
*(demo+1)
demo+1
*(demo+1)
3)そして、私があまり頭が良くないことが証明されたので、推測ゲームをやめて、次の型が何であるかについて決定的な答えを求める必要があります。
&demo[1]
デモ[1]
デモ+1
#include<stdio.h>
int main(void)
{
int demo[4][2]= {{13,45},{83,34},{4,8},{234,934}};
printf("%p\n",&demo[1]);
printf("%p\n",demo[1]); //Should have cast to (void*),but works still
printf("%p\n",demo+1);
printf("%p\n",*(demo+1));
}
出力:
0023FF28
0023FF28
0023FF28
0023FF28