先看看下面一段**:
#include
#include
void f(int *pi)
main()
如果你指望函式f能幫你改變pi的值,那你就錯了,執行上面這段**,你會發現輸出是1。剛開始我也很詫異,我不是傳了指標進去嗎,為什麼沒能保留改變的結果呢?
別著急,再看看下面一段**:
#include
#include
void f(int *pi)
main()
這次執行**,i的值被函式f改變了。對比一下兩段**,你會發現:第二段**中傳給函式f的實參是乙個整型變數位址的拷貝,函式f拿到了這個位址,改變的是這個位址指向的變數。這樣當然可以成功,位址和其拷貝的值是一樣的,所以按照這兩個位址找到的變數自然也是一樣的。第一段**則完全不同,雖然傳給函式f的實參也是乙個整型變數位址的拷貝,但函式f試圖通過改變這個拷貝來改變原來的位址值,這當然行不通,因為指標和它的拷貝是兩個變數。指標也是變數,它在函式呼叫過程中也是傳值呼叫的。其實第一段**和下面這段**效果是類似的:
#include
#include
void f(int i)
main()
這段**大家一看就知道函式f不會改變i的值,因為主函式傳給f的只是變數i的乙份拷貝,改變拷貝的值並不會影響原變數的值。其實這段**和第一段有什麼區別呢,不過乙個是整型變數,乙個是指標變數,它們都是傳值呼叫的。
#include
#include
int *f()
main()
指標變數也是傳值呼叫的(C語言)!
先看看下面一段 include include void f int pi main 如果你指望函式f能幫你改變pi的值,那你就錯了,執行上面這段 你會發現輸出是1。剛開始我也很詫異,我不是傳了指標進去嗎,為什麼沒能保留改變的結果呢?別著急,再看看下面一段 include include void ...
C語言函式引數的傳值和傳址呼叫
大家都知道,c語言一般的引數都是傳值呼叫的,但有時候也有例外,下面就分析一下什麼時候傳值呼叫,什麼時候傳址呼叫。標量引數都是傳值呼叫,不會對標量產生任何影響 include void add one int value int main int argc,char const argv 執行結果 傳...
C語言 函式傳參 傳值 傳指標 傳指標的指標
本文參考這兩篇文章 文章 一 文章二。在學習資料結構中建立單鏈表的時候,疑惑 已經定義了node,用到結構體指標的時候直接用 node就好了,為什麼還要再定義乙個 linklist呢,為什麼傳參的時候又要用linklist l呢?下面我們就來循序漸進,由淺入深來解決問題,這裡舉兩個例子作為比較。首先...