int a[] = {1,2,3,4};
printf("%d",sizeof(a)/sizeof(a+1));
出力: 4
誰でもこれを説明できますか?
それは間違っています。 sizeof(a)
は配列sizeof(a+1)
のサイズであり、ポインターのサイズです。2つに分けても意味がありません。
著者がおそらく意図したことは次のとおりです。
sizeof a / sizeof a[0]
これにより、配列内の要素の数が得られます。 sizeof a[0]
のサイズですint
。
あなたのコードがあなたに正しい答えを与える理由は、あなたのマシンがたまたま持っているからsizeof(int) == sizeof(int *)
です。
余談:%zu
を印刷するために使用しますsize_t
。