重新温习C语言之“指向指针的指针”

今天重新拿起在2008年买的《C和指针》来温习,

这本书可是经典之作,记得当时卖脱货,等了好久才在当当网上买下来的。

由于对“指向指针的指针”概念一直理解不清晰,看到程序中有这样用到就会产生畏惧心理,今天狠狠心,看能否拿下来!

先借用别人写的C++语言实例,其实和C语言一样的:

#include
using namespace std;

int main()
{
int a[5] = {1, 2, 3, 4, 5};
int *p = a;
int **point = &p;

cout << "a = " << a << endl << "p = " << p << endl << "&p = " << &p << endl << "point = " << point << endl << "&point = " << &point << endl; for (int i = 0; i < 5; i++) { cout << "&a[" << i << "] = " << &a[i] << endl; } return 0; } 运行结果图如下: 1
内存分配图如下:
2

从上图可以看出:

point指针中存放的是p指针的地址,而p指针中存放的是a[0]的地址,所以*point和p两者是等价的。

依照此结论,我们可以推导:

1. **point 等于 *p 等于 a[0]
2.*point等于p:之所以*point和p是一样的,前者是取point指针中存放的地址(0025F754)中的值,即取地址0025F754中存放的值(0025F760),而后者就是0025F760,所以两者是等价的。
3.*(p+1) 等于p指针加1,等于取数组下一个元素的值
4. *point++ 等于 p++

这里有个疑问point++是什么呢?

我的理解是point存放的是p的地址0025F754,则point++等于point+sizeof(point)等于0025F754+4,看起来是P后面的地址。
同理:
p++等于p+sizeof(p)等于0025F760+4等于a[1]的地址

发表回复