|
1鱼币
实不相瞒,吾乃小白一枚,初入C道,不得其法。吾今求一良师,必当勤学苦练,师若不弃,或跪或躺,岂不快哉?
好吧,大脑刚刚短路了一下,下面进入正题:
就是说,有一个很小的程序想请各位大神看一下子,为啥输出的是这些乱七八糟的玩意...
程序是这样纸的:
#include<stdio.h>
char foo(int a,int b);
char foo(int a,int b)
{
return ;
}
int main()
{
int x,y,z;
z=foo(x,y);
printf("%d\n",z);
return 0;
}
我是用gcc编译的,程序编译通过输出16. 如果将char替换成int输出134513424;如果将char替换成float输出-2147483648.
小编看到结果的时候顿时就蒙圈啦!不同编译器输出会有差别吗?具体的原理是啥呢?
帮帮我吧,不然晚上又要失眠啦,呜呜~
1.你那个函数根本没有返回值,所以无论你的返回类型变成 int或者 char无论什么类型,编译器由于没找到返回值就在内存里随地找了个数字,那个结果是不确定的. 至于你那个主函数里的z = foo (x, y)后面那函数部分输不输入值根本没啥意义,,,,因为没有返回值,所以结果都是不确定的.
2. char类型占1个字节也就是最多4位, int和float都是4个字节最多32位,编译器可能只是随意在这些范围内从内存里找个数字罢了。
我觉得这个版主好过分啊, 你厉害你看得懂就解释下,贴个新学的人看不懂的代码装隔壁。真以为自己牛逼死了
|
最佳答案
查看完整内容
1.你那个函数根本没有返回值,所以无论你的返回类型变成 int或者 char无论什么类型,编译器由于没找到返回值就在内存里随地找了个数字,那个结果是不确定的. 至于你那个主函数里的z = foo (x, y)后面那函数部分输不输入值根本没啥意义,,,,因为没有返回值,所以结果都是不确定的.
2. char类型占1个字节也就是最多4位, int和float都是4个字节最多32位,编译器可能只是随意在这些范围内从内存里找个数字罢了。
我觉得这个版主好过分 ...
|