指针的问题

我们都知道指针是用来操作内存空间的,我们可以简单的拿来改变某个变量的值

如:我们定义一个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;
}

原文地址:https://www.cnblogs.com/qpxv/p/3733999.html