C-问问关于谭浩强函数章节的问题
#include "stdio.h"
void main()
{
int max(int x,int y);
int a=3,b=5,c;
c=max(a,b);
printf("%p %pn",&x,&y);
printf("%dn",c);
}
int max(int x,int y)
{
printf("%p %pn",&x,&y);
return x>y?x:y;
}
为什么运行的时候 提示没有声明x和y呢??
我只是想知道 前个x和y的地址和后x和y的地址是否一致而已
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
void main()
{ //==>{}就是变量的作用域
int max(int x,int y); //==>只是声明函数max,没有定义x、y,
//==>该行可以写成:int max(int,int);
int a=3,b=5,c;
c=max(a,b);
printf("%p %pn",&x,&y); //==>所以到这里,x、y还没有被定义
printf("%dn",c);
}
#include "stdio.h"
void main()
{
int max(int x,int y);
int a=3,b=5,c;//如果采用C++的IDE,例如VC++ 6.0,运行不会出错,但是采用C的IDE,例如Trubo C,这里会编译出错,因为C语言变量声明要在函数的最前面,即max函数前面一行声明
c=max(a,b);
printf("%p %pn",&x,&y);//这里应该改成printf("%p %pn",&a,&b);
printf("%dn",c);
}
int max(int x,int y)
{
printf("%p %pn",&x,&y);
return x>y?x:y;
}
上面给出程序修改,下面进行问题分析:
1)没有声明x和y,是因为你在main函数中没有声明x和y变量,int max(int x,int y)中的x和y是max函数的形参,对于main函数而言,是局部变量,只在max函数里面有用,对main函数没有用,建议你可以查看一下局部变量和全局变量以及参数传递的相关资料;
2)int max(int x,int y),这种函数声明形式,参数传递是值传递,在函数调用max(a,b)时,开辟了两个空间给x和y,将a的值传递给x,将b的值传递给y,所以两次打印的地址是不相同的;如果采用引用传递,int max(int &x,int &y),这种函数声明形式,x和a指向同一个地址,y和b指向同一个地址,则两次打印的地址是相同的。