永发信息网

C语言,在主函数中为什么不能修改函数的返回值???

答案:3  悬赏:70  手机版
解决时间 2021-11-07 16:31
C语言,在主函数中为什么不能修改函数的返回值???
最佳答案
这个函数返回的是一个地址,不能作为左值
比如你在windows下编程,函数返回值存放在eax寄存器中
那么回到main函数的时候eax里存放的就是whw函数返回的一个地址的值,假设为0xffffffff
想象一下,0xffffffff = 5是几个意思,就类似于表达式15 = 5
退一步讲whw返回的是一个int*类型,怎么能赋个5

就类似
int *p = 5; 也会出错
如果要编译不出错
可以改成这样

int* whw(int* a);

main()
{
int p=12;
*(whw(&p))=5;
printf("*whw(&p)=%d\n",*(whw(&p)));
return 0;
}

int* whw(int* a)
{
return a;
}追问嗯,但是改成如下:
#include
const int* whw(int* a)
{
return a;
}
有一句话*(whw(&p))=5;是不能通过编译的。 函数返回值为const int*是指函数返回值为指针常量,也就是说指针的指向不变。但是指向的内容发是可以变化的啊!!!追答你是什么开发环境,我这边cfree和vc都能通过
~~~~~~~~~~~~~~~~~~~~~~~~~~
你还是没理解我的话

返回值不管它是形容的什么
它本身是一个数值,存放在eax寄存器中,而这个值我们知道是一个地址,这个能明白吧
也就是说如果你不做任何处理他表示的就只是一个地址。而这个地址怎么能作为左值呢?

再举个例子你应该能明白
int func()
{
xxxxxx;

return a;

}
上面的函数最后返回的是一个int类型的数值

那你能够用func() = b吗?当然不能
假如最后a的值为5,那么就变成了5 = b,5能作为左值吗,当然不能,现在明白了吗。

之所以用*,意思是告诉编译器我这个返回值是一个地址,那么加了*号后就可以将等号后面的数值填入这个地址中了。
全部回答
函数不是变量,怎么能存数呢
whw(&p)=5;
没有这种写法的!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
弥勒新阳光机动车登记服务站办公地址在什么地
匆匆忙忙怎么造句
△AB=3A+2B,如果x△(5△2)=74,那x=多少
he’stajj.
怎样可以改变温柔的性格
和男人聊天聊了几句 他说困了 什么意思?
转子流量计在什么情况下要进行刻度校正
成语玩命猜中一个蝇字是什么成语
三星美版tmobile galaxy note5 n920t怎么解网
扬扬今年9岁,爸爸今年37岁,请问:再过多少
中国有“热”这个姓氏吗?
UML怎样新建一个类图
某工厂第一,二车间共有工人180人,第三车间
斗破苍穹2怎样看被自己杀过的人,就是看下谁
婚姻走到尽头的句子
推荐资讯
竹林村地址有知道的么?有点事想过去!
想做酱牛肉,买的牛肉外面那层白色的膜需要撕
“当一纸发黄的旧条约悄然落地”,条约内容是
马云请全国人民吃饭是中午还是下午
instagram推荐第一个用户怎么来的
如何用渐变字在PPT中设置一个字,两种颜色?
用于摄影平面修图的笔记本工作站除了苹果MacB
求小说名 一个男配姓王,是王家的家主,从小
盖茨刹车片和博世刹车片哪个好
tera游戏无法进入
带狮字的三字动漫成语
蓓俪丹多少钱一盒
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?