-2

このテストプログラムがあり、以下の出力が得られます。

#include<iostream>
#include<cstdio>
void fun(char arr[])
{
printf(".size of char : %d\n.", sizeof(arr[0]));
printf(".size of char array: %d\n.", sizeof(arr));
}

main()
{
char arr[10]={'a','b','c','d','e'};
fun(arr);

printf("size of char array: %d\n", sizeof(arr));
}

出力

.char のサイズ: 1 ..char 配列のサイズ: 8 .char 配列のサイズ: 10

これで、最初のステートメントでは配列のメンバーのサイズ、3 番目のステートメントでは配列全体のサイズであることがわかりましたが、2 番目の printf の 8 はここで何と言っていますか?

4

3 に答える 3

6

配列の名前を渡すと、その最初の要素へのポインターに減衰します。sizeofホストシステムでは8であるポインターのサイズを返すこともそうです。

于 2013-09-24T08:30:32.473 に答える
3

関数に「配列」を渡す場合、実際には配列へのポインターを渡します。つまり、式sizeof(array)infunはポインタのサイズを返します。

C および C++ でよくある質問は、配列へのポインターが与えられた場合に配列のサイズを確認できるかどうかです。残念ながら、できません。

于 2013-09-24T08:30:41.540 に答える