当数组作为函数参数传递时,其会退化成指针 | 您所在的位置:网站首页 › 数组名作为函数参数传递的是什么 › 当数组作为函数参数传递时,其会退化成指针 |
前言:c++基础知识,数组和指针,sizeof。
遇到的问题
今天在看插入排序,在我自己写的时候,我想使用类似于java获取数组长度的方法,结果经过查资料发现没有,于是我想到了sizeof,整个数组的字节长度除以某一个数组的值(eg:数组的第一个数)的长度,就是数组的长度,于是我把它写成了一个函数,但是问题来了:它返回的数字是既然是2!?,而且无论我传递的数组里面有几个值或是没有值,也返回2。(我用的是整型(int)的数组) int length(int arr[]) { return sizeof(arr)/sizeof(arr[0]); } 为什么会出现这样的问题?因为在数组作为函数参数传递时数组名会退化成指针,如果你的电脑是64位的,那么任何指针的大小都是8个字节;同理,如果你的电脑是32位的,那么任何指针的大小都是4个字节。 也就是说:上述代码的:sizeof(arr)所表示的含义是arr这个指针所占字节数的大小,我的是64位操作系统,所以就是8,sizeof(arr[0])=sizeof(int),所以就是4,所以最后会出现2的结果。 怎么解决这样的问题?可以在调用排序方法时,直接就把数组的长度传过去,但是不太实用,也比较low,所以应该使用模板,template,这个我会在后续补上的。 |
CopyRight 2018-2019 实验室设备网 版权所有 |