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语言专业人士指点啊! 展开
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语言专业人士指点啊! 展开
3个回答
展开全部
这个函数返回的是一个地址,不能作为左值
比如你在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;
}
比如你在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能作为左值吗,当然不能,现在明白了吗。
之所以用*,意思是告诉编译器我这个返回值是一个地址,那么加了*号后就可以将等号后面的数值填入这个地址中了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询