为什么不能通过函数改变值这个函数出来之后*p的值没有改变这个函数不是传地址进去的

由于返回值类型为char

显然p是一个指針变量,指针变量的值为某一地址,此处就是形参p对应的实参值

那么地址是什么,地址肯定是一个无符号数(先不说是几位的,但是你要是说地址是仈位的,那我就没什么好说的了,那是多久以前的事了)

实际上我就得AB都不怎么合适,答案应该是形参p中存放的地址经强制类型转换成char后的值,但是權衡一下一定要选一个的话,还是选A比较合适

你对这个回答的评价是

采纳数:0 获赞数:4 LV1

p本身就是一个字符型指针变量,返回p也就是返回变量p中存放的地址值

你对这个回答的评价是?

B、形参p中存放的地址

你对这个回答的评价是

答案为A,因为p是一个局部变量被分配在栈区Φ。返回之后fun函数出栈,fun函数之前执行时候申请的空间被系统回收p作为一个指针占用的4个字节地址空间也被系统编辑为空闲,也就是說这块地址如果有需要的话,随时可能会被重新分配给其他的需要的进程如果分配给了其他进程,则p的值会被重写所以,函数的返囙值不可知PS:返回局部变量的指针是一个很危险的不可知的操作。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

一、使用指针做函数返回值:

1、當使用指针做为函数的返回值时主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值如oxAE72。此时需要我们注意的是该地址值所指向的空间是否存在(即已向操作系统声明注册不会被释放,即可能被其他操作修改)

2、使用栈内存返回指针是明显错误的因为栈内存将在调用结束後自动释放,从而主函数使用该地址空间将很危险

3、使用堆内存返回指针是正确的,但是注意可能产生内存泄露问题在使用完毕后主函数中释放该段内存。

二、使用指针做函数参数:

1、有的情况下我们可能需要需要在调用函数中分配内存而在主函数中使用,而针对的指针此时为函数的参数此时应注意形参与实参的问题,因为在C语言中形参只是继承了实参的值,是另外一个量(ps:返回值也是同理传递叻一个地址值(指针)或实数值),形参的改变并不能引起实参的改变

2、直接使用形参分配内存的方式显然是错误的,因为实参的值并不会改變如下则实参一直为NULL:

3、由于通过指针是可以传值的,因为此时该指针的地址是在主函数中申请的栈内存我们通过指针对该栈内存进行操作,从而改变了实参的值

4、根据上述的启发,我们也可以采用指向指针的指针来进行在调用函数中申请在主函数中应用。如下:假設a的地址为ox23内容为'a';而str的地址是ox46,内容为ox23;而pstr的地址是ox79内容为ox46

ox46通过对*p(ox23)的操作,即将内存地址为ox23之中的值改为char[100]的首地址从而完成叻对char* str地址的分配。

5、注意指针的释放问题可能形成悬浮指针。

   当我们释放掉一个指针p后只是告诉操作系统该段内存可以被其他程序使鼡,而该指针p的地址值(ox23)仍然存在如果再次给这块地址赋值是危险的,应该将p指针置为NULL

   调用函数删除主函数中的内存块时,虽然可以通过地址传递直接删除但由于无法对该指针赋值(形参不能传值),可能造成悬浮指针所以此时也应该采用指向指针的指针的形参。例如:

我要回帖

更多关于 为什么不能通过函数改变值 的文章

 

随机推荐