#include
<stdio.h>
int
f(int
x,int
y)
{
printf("x=%d\n",x)//显示传递过来的i值
printf("y=%d\n",y)
//显示传递过来的i++值
if(x>y)
return
1
else
if(x<y)
return
-1
else
return
0
}
int
main()
{
int
i=1
int
k
k=f(i,i++)
printf("i=%d\n",i)//显示执行完函数后i的值
printf("k=%d\n",k)
return
0
}
结果:x=1
y=1
i=2
k=0
楼主您的部分理解是对的,而结果有时候跟编译器有关,它的编译顺序是不一样的。
f(++i,i)
和f(i,++i)运行结果都与理解一致,
f(i++,i)
和f(i,i++)运行结果与理解不一致;++是一种缩写,对于y=i++,就是y=i,然后i=i+1;对于y=++i,就是i=i+1,然后y=i.
struct Student stvoid function(struct Student st)这种形式就是传递地址;
void fuction2(struct Student * pst)这种形式就是传递结构体的地址;
调用这两个函数的形式如下:
function(st)
fuction2(&st)
一般推荐第二种方式,因为第一种方式需要传递整个结构体,需要开辟sizeof(struct student)这么大的内存空间,开销太大,第二种方式则只需要开辟四个字节的内存,用来存放地址;
C语言传递的是值而不是地址,这一点从VB转过来的程序员一定要注意。否则不经意间就会犯错误。另外下层函数修改上层函数变量不是一种好习惯,容易引发错误。C语言中函数可以返回一个函数值,如果你需要返回多个函数值可以用下面的形式fun(int *a, int *b)
{ *a=1*b=2}
main()
{ int a, b
fun(&a,&b) a,b的值被改变
}
如果按VB的习惯,
fun(int a, int b)
{ a=1b=2}
main()
{ int a, b
fun(a,b);a、b的值没有改变
}
是错误的,main中的a,b和fun中的a,b完全是两码事,结果就是调运fun没有任何效果。