编译器警告:sizeof on array function parameter “arr‘ will return size “用另一个值除指针的sizeof值”,sizeof(数组名)时会遇到的坑
编译器警告:sizeof on array function parameter“arr’ will return size of int*" [-Wsizeof-array-argument] gcc “用另一个值除指针的sizeof值”,sizeof(数组名)时会遇到的坑
sizeof数组名,有时候是数组所占空间的大小,有时候是数组中数据类型对应的指针的大小
#include<iostream>
template <class T>
void test01(T arr[])
{
std::cout <<"当数组名当形参时的大小:" << sizeof(arr)<<std::endl;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
test01(arr);
std::cout << "当数组名不是形参时的大小:" << sizeof(arr);
}
以上代码的输出结果是
这说明,当数组名定义该数组所在的函数体内的时候,sizeof()会计算该数组所占用空间的大小,当数组名作为形参的时候,sizeof()会当作该类型的指针来处理;
因为编译器无法提前确定数组作为形参的时候,指定的大小,所以在使用中一定要注意,不能在数组名做形参时使用下面这种语句来计算数组的长度
//不能在数组名做形参时使用,否则会计算出错,
//但是编译器不会报错,只会在高版本的编译器中出警告
int length = sizeof(arr)/sizeof(arr[0]);
版权声明:本文为weixin_44634753原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。