编译器警告: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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>