簡體   English   中英

在C中按指針傳遞/按引用傳遞

[英]Pass by pointer/pass by reference in C

我知道如何在函數中傳遞指針,我覺得我仍然對兩種術語感到困惑,例如按引用傳遞和按指針傳遞。

有人問我:

編寫一個程序,該程序使用指針通過將變量x傳遞給其值加倍的函數來傳遞變量x。 函數的返回類型應該為空。 調用函數后,應從main()打印變量的值。 x的原始值為5。

我寫了下面的代碼。 您能根據問題的要求告訴我哪個評論編號正確,並消除我的疑問?

#include <stdio.h>
//double pointer
//void double_ptr(int **x_ptr)
//{
 //   **x_ptr *=2;

//}

void double_ptr(int *x_ptr)
{
    *x_ptr *=2;
}


int main()
{
    int x=5;
    int *x_ptr=&x;      // single pointer

    //double_ptr(*x_ptr);  // this is out of question's demand.
    //int**x_x_ptr=&x_ptr;    // double pointer
    //double_ptr(&x_ptr);     // 1. pass with double pointer
    //double_ptr(x_x_ptr);      //2. pass with double pointer
    //printf("%d",**x_x_ptr); //3.print with double pointer

    double_ptr(x_ptr);     //4.pass by pointer?
    //double_ptr(&x);          //5.pass by reference?
    printf("%d",*x_ptr);
    return 0;
}

指針傳遞實際上是按值傳遞,C中沒有這樣的引用傳遞概念。

在C語言中,按引用傳遞==通過指針傳遞。

void double_ptr(int *x_ptr)
{
      *x_ptr *=2;
}
int main()
{
      int x=5;
      double_ptr(&x); /* a value is being passed*/
}

通過引用傳遞(在C ++中):

void double_ptr(int& x_ptr)
{
   x_ptr *=2;
}
int main()
{
     int x=5;
     int &x_ptr=x;
     double_ptr(x_ptr); /* no temporary is being created i.e. no extra memory allocation is here*?
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM