我們都知道指針是用來操作記憶體空間的,我們可以簡單的拿來改變某個變量的值
如:我們定義一個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;