sizeof()运算符为数组和指向数组的指针返回不同的值
sizeof() operator returns different value for an array and pointer to an array
下面是一个C程序:
#include<stdio.h>
void func(int a[])
{
printf("%dn",sizeof(a));
}
int main()
{
int arr[10];
printf("%dn",sizeof(arr));
func(arr);
return 0;
}
现在的问题是,当我使用sizeof(arr)时,size of()operator返回40,但当我使用size(a)
这种行为的原因是什么?
简单但令人困惑:函数参数(如int a[]
或int a[42]
)将调整为int* a
。func(int a[])
调整为
void func(int* a)
在这里,a
实际上只不过是一个指针。所以sizeof(a)
就是sizeof(int*)
。
除此之外,在许多情况下,数组可以衰减为指针,例如将arr
传递给func
。这使得这种情况发生
func(arr);
即使CCD_ 10的参数是指针。
您正在将"指针"的大小与数组的实际大小进行比较。
相关文章:
- 为什么 C++ 中的字符数组返回其项目而不是地址?
- C++ bool 数组返回 1 或 0 以外的值
- C++ ostream 从对象数组返回数据
- 类中的重载运算符 [],因此它可以从模板类中的数组返回对象
- 指向对象的指针数组返回jibberish
- 具有基本结构的结构数组返回错误的答案
- 数组返回乐趣 movie_check()
- C++从字符数组返回类型为T的指针
- C++-将数组返回到主函数,并将数组传递给另一个函数
- C++:如何通过异常处理从越界数组返回值
- 整数数组返回类型
- 从字符串流复制到 char * 数组返回为函数参数
- C++函数从对象数组返回对象的副本.这是默认行为吗?
- 8字节数组返回长(C#到C++)
- 向c#数组返回一个字符数组c++
- 从并行数组返回值,并在以后的函数中使用这些值
- 将c++中的浮点数数组返回给Python
- 如何在gsoap中使字符串数组返回值
- 将两个字符相乘并向数组返回int
- C++套接字 - 从结构数组返回单个地址信息