首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

来一道 C+面试题试试手?

各位,C语言中的指针大家经常会见到用到,C++中由于框架和引用的存在,指针的应用比C少很多,二级指针更是少见,但是今天看到一道面试题,就是有关C++二级指针的,拿出来与大家分享一下,希望对大家的C++学习有帮助。

题目是这样的:

问:程序能否达到目的:在GetMemory()中为main函数中的开辟空间,并将str指向这段空间?

分析:str是一个指针,指向NULL,形参p也是一个指针,初始也指向NULL,在GetMemory函数中,这个指针又指向了新开辟的空间。但是只是形参的指向改变了,实参str仍然指向NULL,并没有改变。因此,程序达不到题目的要求,而且运行时会出现错误,由于str一直指向NULL,执行strcop时,会出现错误,提示某某内存不能写入。

正确的方法应该采用双指针,程序如下:

分析:str是一个指针,指向NULL。而调用GetMemory函数时,传递的是str的地址,p是一个二级指针,*p是一个指针。因此,将str的地址赋给临时变量p,则*p就是指针str的值,改变*p的值就相当于改变str的值。因此这种方法能够得到题目要求的效果。

讲到这里,我们再拓展一下,其实还有另外一种方法,采用一级指针,让函数返回一个指针变量,指向新分配的内存,程序如下:

到这里就讲完了,但最后还要补充一点:万不得已,不要使用这么复杂的指针

从编译原理的角度看C语言是如何转换成汇编语言的?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190826A0SIH800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券