C 语言中指针的指针究竟是个啥

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)这样似乎就变成了指针的指针。在这个过程里发生了什么?

指针指向了另外一个指针。指针的指针的地址是一大块区域的首地址,再根据字符类型对内存地址做增加。最终找到了正确的值。

posted @ 2021-04-09 22:02  季文康  阅读(389)  评论(0编辑  收藏  举报