最簡單的方式理解C/C++語言中的傳指針和傳值差別

學習C/C++,指針是一個無法逾越的坎。在C語言中,如果不使用指針,默認的函數都是“通過值”傳遞的,也就是說傳遞給被調用函數的參數的值是存放在臨時變量(程序員無法看到)中的,而不是存放在原來的變量中,傳值調用的好處就是當您在被調用函數中操作該變量時不會影響到原來變量的值,並且傳值可以讓程序代碼變得更加緊湊。但是有的場景需要在被調用函數中改變原變量的值,那麼您就需要使用傳指針來調用,並且在被調用函數中操作參數值時需要使用指針來引用(*),例如:

#include <stdio.h>

int power_a(int *base, int *n);
int power_b(int base, int n);
int power_c(int base, int *n);

int main(){
    int base = 3;
    int n = 5;
    power_a(&base, &n);
    printf("%d\t%d\n", base, n);
    power_b(base, n);
    printf("%d\t%d\n", base, n);
    power_c(base, &n);
    printf("%d\t%d\n", base, n);
}

/* 如果傳引用要求不改變原來變量的值
則需要另外定義局部變量來保存臨時值*/
int power_a(int *base, int *n){
   int p,nBase, nN;
   nBase = *base;
   nN = *n;
   for(p = 1; nN > 0; --nN){
       p = p * nBase;
   }

   return p;
}

/* 傳值則不需要另外定義局部變量,代碼簡化很多*/
int power_b(int base, int n){
    int p;
    for(p = 1; n > 0; --n){
        p = p * base;
    }

    return p;
}

/* 傳引用不定義臨時變量則會改變原來變量的值*/
int power_c(int base, int *n){
    int p;
    for(p = 1; *n > 0; --*n){
        p = p * base;
    }

    return p;

}

執行main函數後輸出的結果是:

3     5

3     5

3     0

C/C++傳指針和傳值的區別是不是一目瞭然?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章