城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

C深入理解指针变量做函数参数的己值与他值及对数组的操作

10月18日 封了心投稿
  1函数体内指针变量的己值与他值if1includestdio。hincludestdlib。hvoidfoo(intpa,intan){pa解引用修改其指向的值,传址的解引用能够联系被调函数和主调函数的栈帧pa(int)malloc(sizeof(int));未解引用的pa是一个局部变量fool调用结束后其栈帧会被覆盖foo调用一次,堆内存就会泄漏一块大小为size(int)的内存}intmain(){inta0;foo(a,11);intan11;printf(d,a);11free(p);无法释放foo分配的动态内存,因为p本身本没有被修改,且造成了内存泄漏foo(p,22);intan22;pa22;printf(d,a);22上面两次调用,相当于指针pa做左值,一个用了取址,修改自身,一个是指针,指向一个变量,相当于用其做了中转来修改其指向free(p);无法释放foo分配的动态内存,因为p本身本没有被修改,且造成了内存泄漏看上面函数调用后的注释,其实p只是做了右值,本质也是一个值传递,只是其值有特殊性,是一个地址getchar();return0;}else上面试图修改pa指向动态内存造成了内存泄漏,如何正确修改呢?上例正确修改了pa指向的内存空间的值,是因为直接或间接使用了a做右值,其左值是与其类型一致的指针。所以要让pa正确指向一块动态内存而不造成内存泄漏,需要用pa做右值,其左值是与其类型一致的指针。肯定是更高一级的指针includestdio。hincludestdlib。hvoidfoo(intpp,intan){pp(int)malloc(sizeof(int));解引用参数指针可以产生副作用pp自身尽量避免用做左值,未解引用的pp是一个局部变量pp33;}intmain(){inta0;printf(d,a);0foo(pa,33);intan33;printf(dd,a,pa);033free(pa);正确释放foo(ppa,44);intan22;pa44;printf(dd,a,ppa);044free(ppa);正确释放getchar();return0;}总结一下主调函数如果需要利用被调函数的副作用来修改inta函数调用时的实参必须是a(可以是间接的a),左值应是int类型被调函数的函数体内必须是指向a的指针的解引用;主调函数如果需要利用被调函数的副作用来修改intpa函数调用时的实参必须是pa(可以是间接的pa),左值应是int类型被调函数的函数体内必须是指向pa的指针的解引用;endif
  2被调函数读写主调函数的数组includestdio。hvoidfo(intpr,intn){for(inti0;i)pr〔i〕i1;可以是下面三种写法}voidfoo(int(prr)〔5〕,intn){for(inti0;i)for(intj0;j5;j)prr〔i〕〔j〕(i1)(j1);可以是下面三种写法}intmain(){intflag0;数组溢出测试用通过函数来读写一维数组元素intar〔5〕{0};ar〔3〕33;(ar3)33;ar〔i〕这种下标写法是指针(ari)写法的语法糖数组名做右值转化为指向数组首元素的首地址,由此可以正确完成下述的指针算术运算(pr3)33;pri,pr按其指向的元素的长度移动,数字i与类型取得一致也就是移动i个int类型单位的长度,isizeof(int)个字节有了上述铺垫以后,如何通过函数来读写一维数组ar的元素呢?(注意arr本身无意义)需要以ar做实参,也就是右值,其左值(形参)需要是一个int也就是实参对形参的赋值必须类似:在函数体内必须是式的左值写法fo(ar,5);通过函数来读写二维数组元素intarr〔3〕〔5〕{0};arr〔2〕〔3〕23;((arr2)3)23;arr〔i〕〔j〕这种下标写法是指针((arri)j)写法的语法糖int(prr)〔5〕数组名做右值转化为指向数组首元素的首地址,由此可以正确完成下述的指针算术运算数组元素的类型是int〔5〕int(prr)〔5〕的类型,去年标识符和符号r后的int〔5〕就是prr的类型((prr2)3)23;prri,pr按其指向的元素的长度移动,也就是int〔5〕的长度也就是移动i个int〔5〕类型单位的长度,isizeof(int)5个字节有了上述铺垫以后,如何通过函数来读写二维数组arr的元素呢?需要以arr做实参,也就是右值,其左值(形参)需要是一个int()〔5〕也就是实参对形参的赋值必须类似:int(prr)〔5〕在函数体内必须是式的左值写法foo(arr,2);int(prr)〔5〕foo(ar,1);int(prr)〔5〕注意此时第一个实参(或右值)的写法与上面的不同。for(inti0;i5;i)printf(d,ar〔i〕);12345ar与运算符在一起时,ar表示整个数组,而不是数组的元素数组当与运算符和sizeof在一起时表示整个数组,而不是数组的元素。与运算符和sizeof在一起这两种情况以外的上下文都会指向数组首元素注意此时类型的一致性,都是int〔5〕(prr1)99;加1的算术运算移动的是int〔5〕类型的长度,溢出到了arr外的相邻位置flag为什么会是到了flag呢?压栈时先压flat,再压ar〔4〕printf(d,flag);99getchar();return0;}
  3通过函数参数返回动态数组
  通过函数返回值返回动态数组相对于通过函数参数返回动态数组来说要相对容易一些,因为通过参数的话需要更高一级的指针参数:voidheapAr(intp,intn)通过函数参数返回一维动态数组{p(int)malloc(sizeof(int)n);}voidheappa(int(p)〔5〕,intn,intm)通过函数参数返回二维动态数组(列常量){for(inti0;i){(p)〔i〕(int)malloc(sizeof(int)m);}}voidheapArr(intp,intr,intc)通过函数参数返回二维动态数组{p(int)malloc(sizeof(int)r);for(inti0;i){(p)〔i〕(int)malloc(sizeof(int)c);}}注意堆内存的释放也要放两次,且逆向
  End
投诉 评论 转载

苹果澄清开发者疑虑,iPhone12让路新机跌至爱疯价遭疯抢在开发人员发现他们的应用程序目前无法为所有动画使用ProMotion的120Hz刷新率后,人们对这是对电池寿命的强加限制还是错误感到困惑。苹果表示,所有第三方应用程序都可以充分……小米手机有哪些小技巧?个人也使用过一些小米手机,也算一名米粉,其实小米手机除了主流手机功能之外,还有很多实用但并不被大家所熟知的小技巧,今天我们就一起来看看小米手机的实用小技巧有哪些。技巧一:小米计……到了2022年,这些消费电子产品正在消失还有几天时间,我们就将迎来2022年的春节。关注我们三易生活的朋友可能还记得,每年到了这个时候,我们都会推出一些旨在总结一年间市场变化、技术变动的内容,并对接下来一年的行业趋势……公司预测52格力正在遭遇困境1,工业革命会让新产业快速发展,通常也会导致旧产业全行业覆灭或衰退。那些原本就衰退的行业会加快衰退,和新技术相抵触的行业会衰退,本就处在快速发展通道里的行业不衰退。2,电……特斯拉AIDay内容快报自动驾驶到人形机器人文探员A图网络编辑kaka北美时间2021年8月19日的特斯拉AIDay,就像其2019年的AutonomousDay和2020年的BatteryDay一样,……C深入理解指针变量做函数参数的己值与他值及对数组的操作1函数体内指针变量的己值与他值if1includestdio。hincludestdlib。hvoidfoo(intpa,intan){pa解引用修改其指向的值,传址……苹果正式推送iOS15旧机新面貌,你升级了吗?今天凌晨一点,苹果正式推送了iOS15新系统的正式版本,不少人熬夜等待系统升级,小胖就是其中一员。而此前已更新到RC版本的用户本次推送仅是推送补丁更新,修复小组件问题。据……2022年碳中和事业巅峰,错失了这么多风口,你还在犹豫什么?最近发现时间真的过得很快,时代变化也很快,快到我们的思想根本反应不过来,从短视频、网红经济、IP制造、元宇宙、NFT再到碳中和,也就是短短的几年时间,一个接一个的风口,好像正要……助听器通道是什么意思?通多数越多越好?看真相在选择助听器的时候,提前了解过助听器的朋友大多都会问这款助听器的通道数是多少?通道数经常被当作初步评估助听器好与不好的关键因素,甚至是最重要的指标。尤其是在选择价位不同的……谈谈我用的韩版三星S21u使用感受购买之前一直在用苹果手机,这也是我第一次用三星。从国行12换到s21u韩版说说缺点。第一就是韩版信号差,去商场没信号,在我们这个小城市5G从来没收到过,我的12差不多到处……10万级纯电车能否来台能打的?比亚迪海豚售9。38万起8月29日,在刚刚开幕的成都车展上,比亚迪3。0纯电平台首款车型海豚正式上市,共推4款车型,售价区间为9。3812。18万元。这是比亚迪认真入主10万元级别纯电动车市场,按道理……富瑞维持京东集团SW(09618)买入评级目标价473港元智通财经APP获悉,富瑞发布研究报告称,维持京东集团SW(09618)买入评级,目标价473港元。报告中称,预期京东集团第四季收入同比增长21至2710亿元(人民币,下同……
比充电在座的都是弟弟,真我GTNeo3搭载150W闪充实测阿里女员工周某被开除了,大家怎么看待这次事件?人工智能概念地球上出现了第一列自动驾驶的火车适合女生用的几款手机,性能颜值均在线开学季20003000元档手机选购指南今日数据精选北京朝阳区52万余人核酸阴性全球最长寿老人去世几大互联网公司大裁员,互联网要走向没落了吗?4款3000多元2K屏手机大战golangstruct中字段开头是大写还是小写有什么区别呢腾讯两大事业群高管调整后,两位副总裁殷宇和郄小虎连发内部信AMD锐龙R75800H性能怎么样?相当于什么级别?
NewSQL分布式数据库发展策略讨论脸部造句用脸部造句大全七言律诗大全500首诗词诗词名句诗词鉴赏。。。真正高贵的人从不显摆自己的优越感热文除腿毛如何永久去除腿毛骁将三国矿脉争夺玩法介绍,维持稳定的收益管道需注意这些细节业大造句用业大造句大全乐城怎么样(北京乐成)做自媒体赚钱,拍短视频赚钱,钱从哪里来呢?给你解密细节新世界,配角抢主角的光环,周冬雨红袄出镜,诠释女性新思想加班的理由为什么中国唯一的女皇帝出现在唐代

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁