当数组作为函数参数传递时,其会退化成指针 您所在的位置:网站首页 数组名作为函数参数传递的是什么 当数组作为函数参数传递时,其会退化成指针

当数组作为函数参数传递时,其会退化成指针

2024-07-12 17:05| 来源: 网络整理| 查看: 265

前言: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 实验室设备网 版权所有