关于C语言的参数传递顺序……

Python017

关于C语言的参数传递顺序……,第1张

楼主您好,首先您要理解一下i++的行为,即先用i,然后再++,所以,传递参数时先用i=1的值,用完了然后++,即先用x=y=1=i,然后i=2;我把程序给您改一下,你就会根据结果看的很明白了。

#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 st

void 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没有任何效果。