C 语言中指针的指针究竟是个啥
一、前言
今天我们 QQ 群里同学写了句 a[0] = *(a+0)
这样的代码。和大家做一个分享,然后我们看看怎么回事。
二、代码
看过之前 一文让你明白 C 语言中的指针的同学,不难写出这样的代码。
在这里,我们其实是定义了个指针(指向内存空间的地址)。在 一文让你明白 C 语言中的指针 里我们写到:当指针和数组彼此独立,只能依靠地址递增实现读取。
2-1 引入单指针
那么是否可以将这段代码改为这样:
这边希望大家注意的是,我们将指针地址加1后取值。
然而地址并不是只是加了1,实际上是根据 int 大小,加了4个bits.
2-2 指针的指针
如此一来,也就是说 a[0] = *(a+0)
是没问题的。
我们如果在外面再套一层,写成这样子呢:a[i][j]=*(*(a+i)+j)
这样似乎就变成了指针的指针。在这个过程里发生了什么?
指针指向了另外一个指针。指针的指针的地址是一大块区域的首地址,再根据字符类型对内存地址做增加。最终找到了正确的值。