1.为什么子函数没有写返回值也可以输出正确VS上编译错误,在gcc上的确是会返回正确的结果 。
看了gcc的反汇编代码,明白了原因 。gcc在实现 a > b 这样的操作的时候,会把一个操作数放eax寄存器,然后z =a 时,会利用eax作中转,意思是先把a的值放eax,然后再由eax复制到z的内存中 。
一般函数都是通过eax寄存器来返回值的,所以main函数中可以顺利的拿到z的值 。
原因是知道了,不过这行为挺诡异的啊 。
如果不相信我的解释,你可以试试再看一个类似判断,你看看最后的返回值是什么就明白了 。
2.C语言程序中,没有返回值的函数如何把运算结果返回给主函数的void swap(int*a,int*b)
{
int t;
t=*a; *a=*b; *b=t;
}
main()
{
int x=10,y=20;
printf("(1)x=%d y=%d\n",x,y);
swap(&x,&y);
printf("(2)x=%d y=%d\n",x,y);
}
这个输出结果是:(1)x=10 y=20
(2)x=20 y=10
这个是址传递,如果是值传递值肯定不会传回给主函数,而地址传递要看交换的是谁,可能会传回也可能不回 。
这个题:把x的地址和y的地址给指针变量a,b,就说明a 指向了x,b指向了y,在swap函数里是把数据进行交换了也就是说把x\y交换了(*a表示取a所指变量的内容,*b同理!)执行完之后输出x,y就是交换后的
【gcc编译怎么写无返回值的函数】
文章插图
- 电脑没声音怎么弄 电脑没声音怎么办win7
- cf怎么截图 CF游戏中怎么截图
- qq空间访问权限 手机怎么设置qq空间访问权限
- 鱼肉馅饺子怎么做 鱼肉馅饺子做法视频
- 怎么开葡萄酒 怎么开葡萄酒木塞小妙招
- 洗龙沟是什么意思 洗龙沟是什么意思衣机里面太脏了怎么办
- wow使命召唤怎么做 使命召唤怎么弄
- 文件隐藏了怎么恢复 windows文件隐藏了怎么恢复
- 英雄联盟查战斗力 英雄联盟怎么查战斗力
- 安卓手机如何省电 安卓手机怎么节省电量