欢迎光临散文网 会员登陆 & 注册

二级指针初始化到底是怎么理解?

2023-09-06 21:20 作者:独眼的安提柯  | 我要投稿

我们先来复习一级指针的定义和初始化 一级指针定义 int *p=地址x; 或者 int *p; p=地址x; 这两种定义的结果都是 p=地址x 换句话说也就是 *p=x 那二级指针定义首先说一下不能定义 地址地址x 这种定义不合法的

但我们可以像这个图一样 让p=地址x 这样地址p就是地址x的地址 那么问题来了 int **p=&q //也就类似于 int **p=&&x; 这句话该如何理解? 有两种理解方式 1按照一级指针解引用理解 (×) 也就是int *(*p)=&(&x); 那么其实就是 *p=&&x 那么***p才能代表x 2第二种理解(✓) 因为一级指针 int *p=&x;//也就是说p=&x的意思也就是 *p=x 那么二级指针 int *q=&x int**p=&q //也就好比 int**p=&&x 那么也就是** p=x的意思 到底哪个理解对呢?

我们通过这个程序来分析

这个程序**p能够输出1 但是按照第一种理解需要***p才行 所以第一种理解是错的第二种理解对了 OK我们下面来看一个例子

这题答案是 7 7 7 3 7 7 我们来分析为什么是这个答案

从这个图可以看到有几次调用需要解几次引用 也就是几个* 补充

第一个图程序报错 第二个图成功运行这是什么原因 其实这两个程序都是语句合法的主要是这个版本的原因 这个版本指针都在定义时候初始化 要么都是先定义再初始化 不能一个指针先定义再初始化 另一个在定义时候初始化

二级指针初始化到底是怎么理解?的评论 (共 条)

分享到微博请遵守国家法律