天天看點

指針的問題

我們都知道指針是用來操作記憶體空間的,我們可以簡單的拿來改變某個變量的值

如:我們定義一個int a = 5;

然後定義一個指針int *p;

将change(&a);利用這個調用函數change();

用函數int change(int *p){*p = 10;return 1;}

輸出結果會是:a = 10;

這就是利用一個簡單的指針來改變了記憶體空間的值将5 改成了10,這就進一步說明指針是用來改變記憶體空間的值的。

接下來我們讨論*p,與**p的問題

很容易了解:*p是指針,**p是指針的指針嘛,是的,但我們要知道,第一個*P是拿來改變某一個記憶體空間的值的

如剛講的記憶體空間a一樣,而**P 是改變指針的指針的記憶體空間的,即改變指針的指針的指向問題,因為改變的是

該指針的的記憶體的值,即,指針的指向問題就改變了,當我們申請記憶體空間的時候會遇到兩種情況:

*head:

head = (SLNode*)malloc(sizeof(SLNode));

**head:

*head = (SLNode*)malloc(sizeof(SLNode));

這兩種情況不一樣,第一種情況,你若使用在初始化函數中,你需要return head;這樣你才能獲得該位址;而

第二種情況就不用了因為你操作的是*head這個位址空間,改變了其值,使其指向改變,但你仍然知道你傳入

的位址,這樣你就可以繼續找到,操作該空間了。

下面舉了一個例子:

#include <iostream>

using namespace std;

int change(int **p,int

*p2){

*p = p2;

}

int main(){

int a = 5;

int

b = 10;

int *p1 ;

p1 = &a;

cout<<"改變前:"<<*p1<<endl;

change(&p1,&b);

cout<<"改變後:"<<*p1<<endl;

return 0;