位址傳入接受指標變數的函式

2021-09-26 06:16:34 字數 426 閱讀 4585

void

fun(int *a, int *b)

int main()

有乙個想法困擾了我很久。既然傳入的是位址,那麼直接交換位址不就好了?為什麼還要解引用再交換值呢?

據此,我認為以下函式也能行得通。

void

fun(int *a, int *b)

但結果除錯的時候,沒有達到預期效果。

想了很久,我試著這樣去解釋。

因為函式fun()接受的引數為指標,所以傳入的&x,&y也被解釋成了儲存x和y位址的指標。所以當以上函式交換了指標所指向的位址,即&x指向y的位址,&y指向x的位址。由於變數的記憶體位址都是固定的,指標交換指向並沒有對位址上的變數進行操作,故變數的值也沒有更改。

指標傳入函式

在將指標傳入函式時實際上也是進行值的傳遞,傳遞的是指標所代表的位址的值,因此將指標傳入函式時,應注意將指標進行初始化,如若不初始化,該指標不確定指向何處,向函式傳遞該指標的位址值,在函式內部解引用進行操作時便會發生不可預知的情況。如以下情況,如若不對l進行初始化,程式在dev平台上會異常退出。inc...

函式傳入變數加上 的問題

在學習資料結構時發現有函式傳遞的非指標變數,卻在變數前面加入了乙個 例子如下 pop s,e e為整型量很奇怪這種操作,上網查詢原因,得到結果如下 原來在c 語言裡,型別前面加 表示引用,如int a 和int b a 此處b前面加 就表示b引用a,兩者值關聯相等,改變b就改變a,在函式傳參時,加 ...

變數的位址和指標

一 變數的位址和指標 計算機中有乙個硬體叫做記憶體條,當我提起這個硬體的時候往往都會說多大的。1g 2g 4g 這都是在說它的空間小,計算機中的記憶體都是以位元組為單位的一片連續的記憶體空間,每乙個位元組都有乙個編號,這個編號就稱為記憶體位址,如同旅館的房間一樣,單人間 雙人間等等,每個房間都有自己...