数组作为形参时的一个陷阱
1.#include <iostream> using namespace std; //交换两个值 void swap(int &a, int &b) {int temp = 0;temp = a;a = b;b = temp; } //把数组中元素为奇数的放左边,偶数放有右边。//此处引发了我对C++ primer中关于对数组作为形参时,函数的定义为什么要用一个int值作为下标变量,如果时候别的方法计算数组长度会如何,我想到了sizeof void arr(int a[],int n) {int begin = 0;int end = n - 1;//end=sizeof(a)/sizeof(a[0])-1; 错误:sizeof(a)/sizeof(a[0])的结果为1while (begin<end){while(a[begin] % 2 == 1 && begin < end)begin++;while(a[end] % 2 == 0 && begin < end)end--;swap(a[begin], a[end]);} } int main() {int ar[8] = { 1,2,3,4,5,6,7,8 };arr(ar,8);for (int i = 0; i != 8; i++) {cout << ar[i] << " ";}return 0; }
此例中,我曾试着在数组当形参的函数中使用sizeof来计算实参数组的大小。但是当数组作为形参的时候,其退化为一个指针,如果sizeof其数组名将计算的是一个指针的大小!
转载于:https://www.cnblogs.com/Royzzzzz/p/10574170.html
数组作为形参时的一个陷阱相关推荐
- C语言用char数组存储一串整数时的一个陷阱
C语言用char数组存储一串整数时的一个小陷阱 C语言的一个关于char数组的小Tip 一.问题起源 二.问题代码 三.问题分析 (一).运行分析 (二).可能的解决方案 四.问题总结(不想看长篇大论 ...
- 二维数组作为形参的参数传递问题[08-0704]-转
2008-07-04 19:06 以下是网上摘抄的一段: 首先,我引用了谭浩强先生编著的<C程序设计>上面的一节原文,它简要介绍了如何将二维数组作为参数传递,原文如下(略有改变,请原谅): ...
- C语言编程基础-10函数形参数组做形参文件操作
函数形参 被调函数的形参在被调用时临时创建并使用实参对其赋值,故直接修改形参(特殊形式的形参如指针,数组除外)本身只会影响到被调函数内部; 形式参数是在函数调用发生时临时创建出来的,在函数调用结束时又 ...
- c语言:当数组作为形参调用函数时,需要连同数组长度一起传进来!
以前一直不知道为什么数组作为形参调用函数时需要连同数组长度一起传进来,难道不能在被调用函数当中利用sizeof()自己算吗?答案是不可以! 下面来做个实验: /*project:test editor ...
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
转自:http://blog.163.com/tianhit@yeah/blog/static/165747821201052195212719/ #include<iostream> u ...
- 二级指针、数组指针、二维数组、指针数组作为函数形参时可传入的实参
1.传参规则: a.当二级指针作为函数形参时,能作为函数实参的是二级指针,指针数组,一级指针的地址 b.当数组指针作为函数形参时,能作为函数实参的是二维数组,数组指针 c.当二维数组作为函数形参时,能 ...
- 编写程序,生成一种贯穿10*10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都向上、向下、向左或向右移动一个元素位置
编写程序,生成一种贯穿10*10字符数组(初始时全为字符'.')的"随机步法".程序必须随机地从一个元素"走到"另一个元素,每次都向上.向下.向左或向右移动一个 ...
- java 静态对象数组_Java静态方法和实例方法 java中的数组作为形参传入
原标题:Java静态方法和实例方法 java中的数组作为形参传入 Java静态方法和实例方法 java中的数组作为形参传入 Java虚拟机 启动一个Java程序的时候,会诞生一个虚拟机实例,当程序关闭 ...
- 《从缺陷中学习C/C++》——6.3 数组传参时的sizeof
本节书摘来自异步社区出版社<从缺陷中学习C/C++>一书中的第6章,第6.3节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区"异步社区&qu ...
最新文章
- 怎么锁定电脑屏幕_和平精英怎么在电脑上玩?匹配手机最简单的方式玩你值得拥有...
- c# Process类使用小例
- iOS_9_scrollView分页
- [渝粤教育] 西南科技大学 计算机网络应用基础 在线考试复习资料2021版(1)
- 作为一名程序员,我站在人生的十字路口
- MySQL表的操作(二)
- 类似clover的软件_Clover 我的电脑里的书签栏
- centos7 thinkpad trackpoint 中键滚动 关闭粘贴 配置
- cmt obm odm 代工模式oem_OEM、ODM、OBM、OPM概念,作用与区别
- 图解阿里达摩院内部结构
- docker制作tomcat镜像并部署war包
- 低功耗设计(low power design)和UPF介绍(含代码示例)
- 华三STP、RSTP、MSTP的详解
- vue-seamless-scroll数据量少时,暂停滚动,继续滚动
- Scrapy爬虫爬取电影天堂
- 再聊面试,这次关于钱,关于培训,关于内卷
- get案例 爬取百度贴吧
- JAVA-List排序-Collections.sort()-对象数组(集合)根据某一属性排序
- 【纯干货】Linux内存管理(最透彻的一篇)
- 房地产行业如何应用区块链技术?
热门文章
- 【译】光线跟踪:理论与实现(一) 简介
- asp中关于从utf8页面到gb2312页面出现乱码得解决
- 醉了,RPC 超时设置也能引起线上事故!
- 因 Redis 分布式锁造成的 P0 级重大事故,整个项目组被扣了绩效。。。
- Java线程详解(15)-阻塞队列和阻塞栈
- 程序员的你是否熟练掌握Chrome开发者工具?
- Mycat中间件的下发准则
- JPA_登录校验Controller代码
- 无符号 byte java_我们能用Java做无符号字节吗?
- vscode怎么运行verilog语言_VScode中不同语言使用不同字体,如C/C++,VHDL