sizeof on array返回不同的值

时间:2013-09-24 08:28:32

标签: c++ arrays

我有这个测试程序,它给出了以下输出。

#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));
}

输出

.size of char:1 char数组的..size:8 .size of char array:10

现在我明白,在第一个语句中,它的数组成员的大小和第三个语句的大小是整个数组的大小,但第二个printf中的8是什么在这里说的?

3 个答案:

答案 0 :(得分:6)

将数组衰变的名称传递给指向其第一个元素的指针。所以sizeof返回指针的大小,在主机系统上为8。

答案 1 :(得分:3)

将“数组”传递给函数时,实际上是将指针传递给数组。换句话说,sizeof(array)中的表达式fun返回指针的大小。

C和C ++中的一个常见问题是,如果你能找到数组的大小,给定一个指向它的指针。不幸的是,你不能。

答案 2 :(得分:0)

您返回的是数组指针的大小,而不是数组。将数组传递给函数时,编译器会将指针的内存映射到数组并将其传递给函数。数组未通过。这将返回大小“8”。