關於指標傳遞和指標的引用傳遞

2021-08-11 19:10:37 字數 1320 閱讀 3601

指標傳遞的實質:

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。

引用傳遞的實質:

在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參變數。

指標傳遞:

例子1:

#include using namespace std;

void test(int *k)

int main()

結果為:10

99 上述例子中,p和k指向的位址相同,所以當*k=99時,*p也就變了。

例子2:

#include using namespace std;

void test(int *k)

int main()

結果為: 10

10上述例子中,一開始時,p和k指向的位址相同,但是後來,k指向了另乙個位址(x的位址),但並不能改變p指向的位址,所以它們就分道揚鑣了。

指標的引用傳遞:

例子:

#include using namespace std;

void test(int *&k)

int main()

結果為:10

99 這就用到了引用傳遞,k只是p的別名,它們指向的始終是同乙個位址,因此,k指向的位址變了p也就隨著變了。

小結:都是位址的概念:指標指向一塊記憶體,它的內容是所指記憶體的位址;而引用則是某塊記憶體的別名。

指標是乙個實體,而引用僅是個別名;

引用只能在定義時被初始化一次,之後不可變;指標可變;

引用不能為空,指標可以為空;

引用沒有const,指標有const,const的指標不可變;(具體指沒有int& const a這種形式,而const int& a是有的,前者指引用本身即別名不可以改變,這是當然的,所以不需要這種形式,後者指引用所指的值不可以改變)

「sizeof

引用」得到的是所指向的變數(物件

)的大小,而「

sizeof 

指標」得到的是指標本身的大小;

指標和引用的自增(++)運算意義不一樣;

引用是型別安全的,而指標不是 (引用比指標多了型別檢查)

關於 指標的引用和指標值傳遞

1,形參是實參的拷貝 值一樣,儲存位址不一樣 包括指標變數,指標變數 int p a p只是儲存位址的變數。請欣賞第一段 回答輸出結果 18分 include includeusing namespace std void try change int p int b 7 p b cout p 說是...

值傳遞,引用傳遞,指標傳遞

最近一直被c 的值傳遞,引用傳遞,指標傳遞這些概念所困擾,一直沒有乙個能說清他們之間的關係通過乙個簡單的例項,或者說淺顯的說法,找了一些相關資料,和自已的個人感受,簡單介紹一下,希望高人指正 c 中傳遞引數的方式有三種 傳引數的值 稱為值傳遞,簡稱傳值 傳引數的位址 稱為位址傳遞,簡稱為傳址 和引用...

值傳遞,引用傳遞,指標傳遞

值傳遞 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。從被呼叫函式的角度來說,值傳遞是單向的 實參 形參 引數的值只能傳入,不能傳出。當函式內部需要修改引數,並且不希望這個改變影響呼叫者時,採用值傳遞。指標傳遞 形參為指向實參位址的指標,當對形參的指向操作時,就相當於對實參本身進行的操作。引...