C++的一些初学问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 14:42:57
#include "stdio.h"
void main()
{
int f(int a,int b);
int i=2,p;
p=f(i,++i);

printf("%d\n",p);
}
int f(int a,int b)
{
int c;
if(a>b)c=1;
else if(a==b)c=0;
else c=-1;
return(c);

}
他得运行结果是0 ,但我了解其中得一些f(i,++i)到底是什么意思
如果把p=f(i,++i);改成p=f得话运行结果就是536.那为什么f(i,++i)=0得呢
因为我是初学得所以连该怎么问也不是很清楚,所以最好得就是把整个程序得每句意思讲解一下
准确答案会额外加分

#include "stdio.h"
void main() //主函数
{
int f(int a,int b); //f函数声明
int i=2,p; //声明变量i和变量p
p=f(i,++i); //将i和++i作为参数传递给f,将返回值赋值给p

printf("%d\n",p); //打印
}
int f(int a,int b) //f函数定义
{
int c;
if(a>b)c=1; //如果a>b,返回1
else if(a==b)c=0; //如果a==b,返回0
else c=-1; //如果a<b,返回-1
return(c);

}
其实你的问题就是为什么两个参数是i和++i会判断为相等。
那现在需要说明的是,向函数传递参数是以压栈的方式传递的就会容易明白。
先把最后一个参数压入栈中,然后把前一个参数压栈,这个暂时这样理解。
那先压入++i,再传i的时候就已经是3了。但照这样来看,如果参数改为(++i,i)的话,应该就返回1了,一般来说,应该是这样的,但不排除编译器会改变这种算法,因为C标准并没有对此做出规定,也就是说,无论怎样做都是合法的。
另外,你说改成p=f结果是536,我没看明白,是说把函数名赋值给一个变量吗?如果是,那p的值应该是函数f的首地址。