数组上返回不同值的大小

sizeof on array returning different values

本文关键字:返回 数组      更新时间:2023-10-16

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

#include<iostream>
#include<cstdio>
void fun(char arr[])
{
printf(".size of char : %dn.", sizeof(arr[0]));
printf(".size of char array: %dn.", sizeof(arr));
}
main()
{
char arr[10]={'a','b','c','d','e'};
fun(arr);
printf("size of char array: %dn", sizeof(arr));
}

输出

字符大小 : 1..字符数组的大小:8字符数组的大小:10

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

传递数组的名称会衰减到指向其第一个元素的指针。因此sizeof返回指针的大小,该大小在主机系统上为 8。

当你把一个"数组"传递给一个函数时,你实际上传递了一个指向数组的指针。换句话说,表达式sizeof(array) in fun返回指针的大小。

在 C 和 C++ 中,一个常见的问题是,在给定一个指向数组的指针的情况下,你是否可以找出数组的大小。不幸的是,你不能。

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