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

输出

.size of char : 1 ..size of char array: 8 .size of char array: 10

现在我明白了,在第一个语句中它的数组成员的大小和第三个语句是整个数组的大小但是第二个 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 回答
0

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

于 2013-09-24T08:35:04.857 回答