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

#include<stdio.h>int*whw(int*a);main(){intp=12;whw(&p)=5;printf("*whw(&p)=%d\n",whw(&... #include<stdio.h>
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;
}
C语言,在主函数中为什么不能修改函数的返回值???
这条语句whw(&p)=5;
时不能通过编译的!!!求C语言专业人士指点啊!
展开
 我来答
谢应宸
推荐于2016-09-03 · TA获得超过2640个赞
知道大有可为答主
回答量:2731
采纳率:66%
帮助的人:2143万
展开全部
这个函数返回的是一个地址,不能作为左值
比如你在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能作为左值吗,当然不能,现在明白了吗。

之所以用*,意思是告诉编译器我这个返回值是一个地址,那么加了*号后就可以将等号后面的数值填入这个地址中了。
bjxyz
2014-10-20 · TA获得超过2900个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:422万
展开全部
函数不是变量,怎么能存数呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
松山道士
2014-10-20 · TA获得超过121个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:102万
展开全部
whw(&p)=5;
没有这种写法的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式