我有这个测试程序,它给出了以下输出。
#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是什么在这里说的?
答案 0 :(得分:6)
将数组衰变的名称传递给指向其第一个元素的指针。所以sizeof
返回指针的大小,在主机系统上为8。
答案 1 :(得分:3)
将“数组”传递给函数时,实际上是将指针传递给数组。换句话说,sizeof(array)
中的表达式fun
返回指针的大小。
C和C ++中的一个常见问题是,如果你能找到数组的大小,给定一个指向它的指针。不幸的是,你不能。
答案 2 :(得分:0)
您返回的是数组指针的大小,而不是数组。将数组传递给函数时,编译器会将指针的内存映射到数组并将其传递给函数。数组未通过。这将返回大小“8”。