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

#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语言专业人士指点啊!

这个函数返回的是一个地址,不能作为左值
比如你在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能作为左值吗,当然不能,现在明白了吗。

之所以用*,意思是告诉编译器我这个返回值是一个地址,那么加了*号后就可以将等号后面的数值填入这个地址中了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-20
函数不是变量,怎么能存数呢
第2个回答  2014-10-20
whw(&p)=5;
没有这种写法的!

C语言中,为什么有的输出结果主函数的值不变啊,我有点迷
看来你的C语言功底要加强一下了,说笑的!!!在函数里调用另一个函数fun,要使用指针的方式才能改变它的值,如fun(int *x, int *y);如果不使用指针而直接值传递调用,那么在调用完fun函数后,该函数做占用的内存、堆栈都会被释放,即a、b的值还是以前的,不会被改变;使用指针的话,它会直接...

C语言中main()函数是否返回值?
main()是省略了返回值类型,C语言会默认认为成main的类型为int,在main()的函数体内要返回一个值,如return 0;而void main()的返回值是void类型,也就是说没有返回值。这样在main()的函数体内你就不用写return 0;或者return 1;之类的返回语句。在一个程序中,可以说你看不出两者的差别,因为ma...

...既然没有返回值,为什么在主函数中,数组值还是会变 ,
是不会影响到实参的值的,要是按照地址调用(指针调用),是共享同一个存贮空间的,也就是改变的是同一个内存里面的内容,数组名的调用,就是指针调用的一种,int arr(int array[],int n){},你在函数里面改变array[]的值,

在C语言中,主函数是不是必须要有返回值?
在C语言中,主函数必须要有返回值。main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。在C语言标准中强制要求main函数的返...

C语言的main函数必须有返回值吗?
按标准来说,C的main函数是需要有返回值的。标准中main函数返回类型是int的,所以需要一个返回值。但是由于历史原因,很多地方可以看到没有返回值的main。比如直接main()或者说void main() 但是这样一般编译器也不会认为错误,不过建议还是写标准的C的main函数,最好有一个返回值,0表示正常退出。

c语言中为什么有的函数需要有返回值?返回值是干什么的?
返回值是为了方便从函数调用,返回一个值给主调函数。由于参数指针,也可以实现这种功能,所以实际上,是可以做到任何函数都没有返回值的(完全靠参数传递)但很多时候 返回值要比参数回传的方式,代码写起来更简单。比如说,如果通过返回值,来判断函数执行的是否正确 那么可以 if(func()) ...直接写。...

c语言返回值具体是指什么?
子函数的返回值,main主函数也是有返回值的,但是一般用不到都忽略掉了,一般来说的返回值就是子函数的返回值。当需要一个函数去处理数据时,如求平方,这时候求平方后的值可以有两种方法表达 1、以值的形式返回给你,即return x,这样就可以利用这个结果了,此时函数名前当然要加返回的数据类型了 2...

C语言规定,函数返回值的类型由什么决定?
c语言规定,函数返回值的类型是由函数首部定义的类型决定。函数返回值应与首部定义的类型一致,如若不一致,则自动将返回值强制转换为函数首部定义的类型。没有定义类型时默认为int型。也就是说你的函数是什么类型,返回值就是什么类型。比如:函数定义 int fun(int a,char b)返回值就是整型 函数定义 ...

在C 程序中,主函数定义时,不允许指定形式参数。这句话对吗,原理是什么...
以上说法不对,C语言规定主函数的形式参数只能有两个,习惯上把这两个形式参数写为argc和argv,标准写法为:int main(int argc,char *argv[])可以从命令行中读入参数(实参),类似:open test.txt 其中open是程序文件名,test.txt是实参。

在c语言里什么情况下主函数的return 0可以省略
不是的,C语言标准格式是在定义主函数的时候定义其类型,就比如void main()就表示不需要返回值,所以不用return,如果定义的是int main()则需要返回值,有这个的好处是当程序执行完后能检测程序的正确性和可行性,定义这个0的时候是当函数正常执行时就能返回一个0的数给主函数,当不能正常执行时会...

相似回答