c-在我的代码中通过ref呼叫和按值的呼叫混淆



在我的大学刚刚开始C

我在main中创建了一个空数组,称为freq_array,当调用函数频率时,这将作为参数传递。因此,由于在函数调用后,空数组现在将包含值,因此可以通过参考来呼叫?我在其他网站上阅读了通过参考使用指针来调用的网站,所以我有点困惑。谢谢。

 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)。编译器将用后者替换后者。

因此,您可以将其视为通过参考传递的数组,但是指向第一个元素,按值

对于参数,您不能仅通过数组。当编译器看到参数int fr[arraysize]时,它将视为int *fr

打电话

frequency(freq_array);

数组衰变 到指向其第一个元素的指针。以上呼叫等于

frequency(&freq_array[0]);

和C根本没有通过参考通过。指针将按价值通过。

但是,使用指针可以通过参考模仿通过。例如

void emulate_pass_by_reference(int *a)
{
    *a = 10;  // Use dereference to access the memory that the pointer a is pointing to
}
int main(void)
{
    int b = 5;
    printf("Before call: b = %dn", b);  // Will print that b is 5
    emulate_pass_by_reference(&b);  // Pass a pointer to the variable b
    printf("After call: b = %dn", b);  // Will print that b is 10
}

现在,重要的是要知道指针本身(&b(将按价值传递。

相关内容

  • 没有找到相关文章

最新更新