C語言指針再談

昨天使用鏈表時,想要獲取某個節點的指針,而不是獲取其下的數據內容,出現了很多問題,浪費了很多時間,在這裏總結一下。

參數傳值

c裏面,參數不管類型是什麼,它只會傳值,所以,如果要想用一個已經聲明的變量從一個函數中帶出一些數據,必須退後一步輸入參數,也就是說輸入它的地址,如果是指針,也輸入它的地址。

也就是說,函數開始時,會先劃出一塊和你的參數大小一樣的內存空間,然後賦值它的值,函數裏都是在複製後的那片新的內存上操作,不管怎麼樣,你輸入的參數不會變的,等函數執行完後,自動會free那部分空間,所以piu~~,你是無法讓參數將任何值帶出去的。

但是,如果我們引入的參數是一個地址,我們也不需要這個地址變,因爲我們就是想在這塊兒地址上搞事情,然後我們對地址上存儲的數據進行操作就好,因爲就算是它只是將地址複製了一遍,但我自己的指針和函數創建的指針都是指向同一個地址的,我們可以很自然的對它存儲的值進行操作。

一級指針

void Get(int *i)
{
    *i = 1;
}
...
int *i;
Get(i);
printf("%d",*i);

二級指針

void Get(int **p)
{
    *p = head;
}
//head是一個數值變量的地址,這樣可以將這個變量的地址給真正賦值給*i而帶出去;
int *i;
Get(&i);
//可以發現兩個地址一樣
printf("%d,%d",head,i);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章