参数传递C – 指针,地址,别名
有人可以解释一下C参数传递的区别吗? 根据教授的说法,有4种不同的传递参数的方法
- 呼叫按值
- 地址呼叫(指针)
- 调用 – 别名
- 全局变量/静态变量
如果你能举一个例子,我将非常感谢,你的工作将受到赞扬。
-
呼叫按值
将值作为参数传递给函数。 如果函数修改变量,则实际变量不会更改。
void fun1(int myParam) { myParam = 4; } void main() { int myValue = 2; fun1(myValue); printf("myValue = %d",myValue); }
myValue
将始终为2。 -
地址呼叫(指针)
void fun1(int *myParam) { *myParam = 4; } void main() { int myValue = 2; fun1(&myValue); printf("myValue = %d",myValue); }
这里我们将
myValue
的地址myValue
给fun1
。 所以myValue
的值在main()
的末尾将是4。 -
调用-别名
根据我的理解,C中没有别名。 它应该是C ++引用机制。
-
全局变量/静态变量
全局变量和静态变量是存储在公共位置的变量,可由调用者和被调用者函数访问。 因此,调用者和被调用者都可以访问和修改它们。
int myValue = 2; void fun1() { myValue = 4; } void main() { myValue = 2 fun1(); printf("myValue = %d",myValue); }
你可以猜到,
myValue
的值在main()
的末尾是4。
希望能帮助到你。
C按值,周期传递所有函数参数; forms参数(在定义中)是内存中与实际参数(在调用中)的单独对象。 forms参数的任何更新都不会影响实际参数。 您可以使用指针伪造pass-by-reference语义,但指针是按值传递的。
真正的传递参数意味着forms和实际参数引用内存中的同一对象,因此对forms参数的任何更改也会影响实际参数。 实际上,类似指针的对象被传递给子例程,但这对程序员来说是隐藏的。
C不支持pass-by-reference。 C ++支持使用特殊运算符传递引用。 老派Fortran是传递参考。
全局变量对调用者和被调用者都是可见的。
不能说传名或别名传递; 从未使用过使用该机制的语言。