web-dev-qa-db-ja.com

sizeof(&array)は何を返しますか?

質問の後に: 配列のアドレスが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_はどのように動作しますか?

31
user1980750

&str2はポインターです。つまり、プラットフォーム上のポインタのサイズが表示されているだけです。

19

_str2_は_char [10]_タイプです(つまり、配列_10 of_ char`)

_&str2_のタイプはchar (*)[10]です(つまり、_charの配列_10_へのポインタ)。

したがって、sizeof (&str2)は、ポインタ型のオブジェクトのサイズを生成しますchar (*)[10]

8
ouah