質問の後に: 配列のアドレスがCでの値と等しいのはなぜですか?
_#include <stdio.h>
#define N 10
char str2[N]={"Hello"};
int main(){
printf("sizeof(str2): %d bytes\n", sizeof(str2));
printf("sizeof(&str2): %d bytes\n", sizeof(&str2));
return 0;
}
_
出力:
_sizeof(str2): 10 bytes
sizeof(&str2): 4 bytes
_
_str2
_だけが配列_str2
_の最初の要素のアドレスであることを知っています。そして、_str2
_がsizeof
の引数である場合、配列str2全体のサイズを返します。
また、_&str2
_は、arr _str2
_の最初の要素のアドレスでもありますが、型が異なります(char (*)[N]
==配列へのポインター)。しかし、sizeof
の引数である場合、_&str2
_はどのように動作しますか?
&str2
はポインターです。つまり、プラットフォーム上のポインタのサイズが表示されているだけです。
_str2
_は_char [10]
_タイプです(つまり、配列_10 of
_ char`)
_&str2
_のタイプはchar (*)[10]
です(つまり、_char
の配列_10
_へのポインタ)。
したがって、sizeof (&str2)
は、ポインタ型のオブジェクトのサイズを生成しますchar (*)[10]