C语言函数调用参数传递的是什么?

Python017

C语言函数调用参数传递的是什么?,第1张

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

楼主您好,首先您要理解一下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.

函数实参与形参之间的数据传递方式是( 值传递)传递方式,在C语言中,数据传递方式有值传递和引用传递,值传递:传值,实际是把实参的值赋值给行参,相当于copy。

那么对行参的修改,不会影响实参的值 。引用传递: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都指向同一个对象,因此对形参的修改会影响到实参。

扩展资料

传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。

引用传递是将变量的内存地址传递给方法,方法操作变量时会找到保存在该地址的变量,对其进行操作。会对原变量造成影响。可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。

参考资料:百度百科—引用传递