[C++]多重指针

版权声明:未经博主同意不得转载 https://blog.csdn.net/ycwwl1993/article/details/88376534

首先,声明一个二重指针

int **a;

这里**a可以看作是一个整型变量,*a则存储的是**a这个变量的地址,a存储*a的地址。由于**a未被初始化,只是被声明,系统没有分配给**a存储空间,所以*a没有被赋值初始化,a同理。

分析以下代码:

#include<iostream>

using namespace std;

int main(){

     int **a;

     cout<<a<<endl<<*a<<endl<<**a<<endl;

    return 0;

}

执行以上代码,系统会报错,这是因为int **a只是声明,没有定义。

将代码修改:

执行结果如下:

当a被赋值为c的地址,则*a与**a被间接的赋值(*a=c,**a=b);

当我们改变*a的值,令*a=&d,**a则改变为d所在地址中的值,即d,而*a的地址没有改变,所以a的值不变。另外,我们之前令a指向c的地址,所以当*a改变时,c也随之改变。在分析b,之前我们令c指向b的地址,之后改变了c的值,所以c不再指向b的地址,但b本身没有改变,所以b的值依然是2。

总之,**a,*a是**a地址,a是地址*a的地址,当a改变时,由于*a的地址改变,*a的值也会随之改变(就行我们上课a是我们要去的教室,*a则是课程名称,我们要去101上C++,即a=101,*a=C++,当我们去了102,102在上数据结构,那么a=102时,而*a=数据结构),**a同理。

更多精彩内容请关注微信订阅号“编程语言初学者”,我们会将不同网站发布的博客、推文统一发布于编程语言初学者订阅号。


编程语言初学者

猜你喜欢

转载自blog.csdn.net/ycwwl1993/article/details/88376534
今日推荐