安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

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亿元(人民币,下同……
有哪些游戏本可以流畅运行绝地求生?春节红包应回归文化年味春节系列谈千元机真的能买吗?掌握这几个技巧,告别电子垃圾手机电脑都能用,国民好物aigo65w快充,好用不贵联想高盛柳家两代助理老美中国证券市场血泪IQOO冯宇飞的离职原因以及去向预测2022年2月,最新电脑装机配置方案汇总。含显卡性能天梯排行影响12亿人!腾讯率先拆墙,微信可直接跳转淘宝抖音!互联网巨中国电信总经理李正茂通过卫星通信技术与5G6G结合推进天地一58同城卷入血奴事件,舆论发问屠龙少年终成恶龙?互联网裁员潮亲历者那些阵痛挣扎与去向阿里云泄露客户信息遭投诉?阿里属实已经严肃处理秋季小儿过敏性鼻炎的预防措施有哪些土地使用年限50年的土地性质是还是什么?京东(钟祥)数字经济产业园开园京东科技助力湖北钟祥加“数”转我们都有过的叛逆初中作文新年到了男人的味道那一抹微笑《续篇》三成龙女儿街头领救济食物!穿一双黑布鞋蓬头垢面,国外生活显心酸那些难以忘记的爱情伤感个性签名拆迁又回来了?符合这一要求将重建全拆,浙江已率先下发通知10张图告诉你,亲子关系是这样被毁掉的宝宝出现尖足是不是脑瘫?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利