参数传递C – 指针,地址,别名

有人可以解释一下C参数传递的区别吗? 根据教授的说法,有4种不同的传递参数的方法

  1. 呼叫按值
  2. 地址呼叫(指针)
  3. 调用 – 别名
  4. 全局变量/静态变量

如果你能举一个例子,我将非常感谢,你的工作将受到赞扬。

  1. 呼叫按值

    将值作为参数传递给函数。 如果函数修改变量,则实际变量不会更改。

    void fun1(int myParam) { myParam = 4; } void main() { int myValue = 2; fun1(myValue); printf("myValue = %d",myValue); } 

    myValue将始终为2。

  2. 地址呼叫(指针)

     void fun1(int *myParam) { *myParam = 4; } void main() { int myValue = 2; fun1(&myValue); printf("myValue = %d",myValue); } 

    这里我们将myValue的地址myValuefun1 。 所以myValue的值在main()的末尾将是4。

  3. 调用-别名

    根据我的理解,C中没有别名。 它应该是C ++引用机制。

  4. 全局变量/静态变量

    全局变量和静态变量是存储在公共位置的变量,可由调用者和被调用者函数访问。 因此,调用者和被调用者都可以访问和修改它们。

     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是传递参考。

全局变量对调用者和被调用者都是可见的。

不能说传名或别名传递; 从未使用过使用该机制的语言。