我们都知道指针是用来操作内存空间的,我们可以简单的拿来改变某个变量的值
如:我们定义一个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;
}
原文:http://www.cnblogs.com/qpxv/p/3733999.html