参考文章:c中自定义函数通过sizeof来输出数组的长度为何不正确?【原创】

错误原因

我们可以使用sizeof(arr) / sizeof(arr[0])求数组长度,但是要注意:sizeof()函数是求数组所占的内存空间大小(不是长度)。当在函数中使用该方法求数组长度时,由于数组作为函数参数传入函数的过程中会“退化”为指针,因此将会导致sizeof(arr)求出的是一个指针的内存空间大小,而非数组的内存空间大小–>从而导致计算的长度错误

int *findPrime(int *arr, int len) {int i = 0;//cout << sizeof(arr);   //会输出8字节,而不是24字节//cout << sizeof(arr[0]);  //会输出4/*int arr[] = {10,20,30,3,12,14};int *p = arr;  //会输出8字节,与上面的sizeof(arr)一样,证明确实是该问题导致的错误cout << sizeof(p);*/while(i <= len) {if(isPrime(*(arr + i))) {return arr + i;}i++;arr = arr + i;}return NULL;
}

解决办法

在声明数组之后就计算出数组长度,然后将数组长度作为函数参数也一起传入
如:

int arr[] = {10,20,30,3,12,14};
int len = sizeof(arr) / sizeof(arr[0]);
int *find = findPrime(arr, len);

函数中使用sizeof(arr) / sizeof(arr[0])求数组长度不正确的原因相关推荐

  1. c语言在函数中使用sizeof求数组长度

    c语言sizeof的重要用途之一就是求数组长度,但是sizeof必须在数组定义的位置使用.不能作为参数传入函数并在函数中使用sizeof: 比如下边这个例子 函数中打印结果为: 数组的长度应该是5但是 ...

  2. C语言试题三十一之判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。

    1. 题目 请编写函数function,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no.回文是指顺读和倒读都是一样的字符串. 2 .温馨提示 ...

  3. 算法训练 - P1101 ——有一份提货单,其数据项目有:商品名(MC)、单价(DJ)、数量(SL)。定义一个结构体prut,其成员是上面的三项数据。在主函数中定义一个prut类型的结构体数组,输入每

    问题描述 有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输 ...

  4. 求数组长度的几个函数

    纯纯小白,有错请指出,谢谢. 1.sizeof函数 对于一个给定数组,如:int arr[]={1,2,3,4,5} , 可以利用 sizeof(arr)/sizeof(arr[0]) 的方式来求字符 ...

  5. c语言整形数组长度_c语言中如何求数组长度

    展开全部 1.c语言中,e5a48de588b63231313335323631343130323136353331333337613861定义数组后可以用sizeof命令获得数组的长度(可容纳元素个 ...

  6. java 数组中差值最大数对,[算法题] 求数组有序后相邻元素之间的最大差值

    1. 题目要求 给定无序数组(此数组是long类型的数组,但以下示例只列一些小一点的数),例如: [3, 1, 12, 9, 3, 7, 1, 4, 7, 8, 10] 求数组有序后相邻元素之间的最大 ...

  7. 解答java中如何求数组长度?

    方法很简单,只要数组名称.length就可以了.下面举个例子 但是记住,数组一旦创建,在程序运行期间,长度不允许改变.除非你new一个数组.

  8. 【C语言数组】数组的创建和初始化 内存中的存储 冒泡排序 sizeof 数组名

    test 一.一维数组的创建和初始化 1.数组的创建 2.数组初始化 2.1.不完全初始化 2.2.不初始化 3.一维数组的使用 3.1.用下标打印1-10 3.2.sizeof 计算数组的元素个数 ...

  9. 字符串函数中的求长度、查找、分割和错误报告函数(strlen,strstr,strtok,strerror)

    文章目录 一.strlen - 求字符串长度 1.函数介绍 2.模拟实现(三种方式) 二.strstr - 字符串查找 1.函数介绍 2.模拟实现 三.strtok - 字符串分割 四.strerro ...

最新文章

  1. 学计算机必懂的53个单词缩写
  2. 2021年春季学期-信号与系统-第二次作业参考答案-第四小题
  3. dubbo优势_Dubbo 迈出云原生重要一步 应用级服务发现解析
  4. 佳能c3320怎么设置接收方_入门级单反相机佳能800D是否值得买?在我看来价格决定一切...
  5. 【转载】线段树 区间合并 小结
  6. ETH-TRUNK链路原理和实验
  7. 2019年3月训练记录(3.01~3.23)
  8. 商品管理查询分类下的所有子类目
  9. 车牌号识别Python+OpenCV实现(含代码)
  10. database is locked错误
  11. 台式计算机中远程登录在哪里,电脑如何进行远程连接
  12. 编译安装php8,[PHP] 最新抢先编译安装PHP8.0.0 alph1以及FPM
  13. Computational Intelligence Assisted Design -- In Industrial Revolution 4.0 (计算智能在工业4.0的应用) --绪论
  14. Linux下MySQL基本操作
  15. android自定义侧滑菜单代码,原生Android 侧滑菜单实践(部分)
  16. 数论——————最简分数
  17. NVIDIA平台xavier upgrade update更新完后驱动丢失问题
  18. 让人才不再稀缺,让就业水到渠成 ——记传智播客总裁黎活明
  19. 仿京东商城左侧商品分类导航-JS网页特效
  20. 修复 matlab 文件关联

热门文章

  1. 解决ppt的页码不显示的问题
  2. 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
  3. Windows环境下,输入(Chkntfs /X C:)命令可以取消系统每次启动对C盘的磁盘扫描程序
  4. S3C2440 I2C总线控制
  5. web网站服务(一)
  6. Chamfer Distance (CD)
  7. netstat -ano 'netstat' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  8. 最新 eCharts 世界地图国家名映射
  9. 中国大数据分析行业研究报告
  10. HelloWorld--JAVA程序