在我的代码中混淆了 ref 调用和 value 调用

标签 c pass-by-reference call-by-value

今年刚开始在我的大学学习 C,我很困惑我的函数调用是通过引用还是值。

我在 main 中创建了一个名为 freq_array 的空数组,并在调用函数 frequency 时将其作为参数传递。那么既然在 func 调用之后,空数组现在将包含值,这被认为是通过引用调用?我在其他网站上读到通过引用调用使用指针,所以我有点困惑。谢谢。

 void frequency(int[]);    //prototype

 frequency(freq_array); //func call

 void frequency(int fr[arraysize]) //arraysize = 18
 {
       int n;

       for (n=0; n<10; n++)
       {
        fr[n]= 100 * (n + 1);   //goes from 100Hz - 1000Hz
       }

        for (n=10; n<18; n++)       //goes from 2000Hz - 9000Hz
       {
         fr[n]= 1000 * (n - 8); 
       }

     }

最佳答案

理论上,C只有“传值”。但是,当您将数组用作函数的参数时,它会被调整(“衰减”)为指向第一个元素的指针。

因此 void frequency(int fr[arraysize]) 完全等同于 void frequency(int* fr)。编译器将“在行后”用后者替换前者。

因此您可以将其视为通过引用传递的数组,但是指针本身,指向第一个元素,通过值传递 em>.

关于在我的代码中混淆了 ref 调用和 value 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55948498/

相关文章:

c - C程序中的Shellcode

c++ - 添加两个号码。无需任何运算符(operator)

c - printf 没有打印出预期的结果,为什么?

c++ 通过 const 指针或对 const 指针的引用传递

pass-by-reference - 按引用调用和按值调用结果

c - 考虑到优先级和结合性,如何解决这个表达式?

java - 创建一个单独的对象并从 Java 中的对象引用编辑它

java - SWIG C++ 到 Java - 包装枚举指针(按引用传递)

c - 如何将参数传递给函数指针

java - 为什么修改了 ArrayList 参数,但没有修改 String 参数?