指针取值的两种方法
有一个二维数组int a={1,3,5,7,9,11,13,15,17,19,21,23}; 请问它的a和*a和**a是多少?a是这个数组的地址但是*a不应该是这个地址所指向的内存吗?怎么a和*a的值是一样的呢?**a我能理解是1. 并不存在专门的二维数组这样一个数据结构,二维数组只是一维数组的线性扩张。简单来说,你定义的这个数组有三个元素,三个元素都是长度为4的一维数组。你*a也确实得到了第一个元素。但第一个元素不是数值,而是存放了一个数组,是一个数组指针。所以还是地址。
至于相等,这个说来话长。要涉及底层原理数据结构。你记个结论,二维数组地址,二维数组首行元素地址,二维数组首元素地址确实是同一个地址。 本帖最后由 Cmack 于 2020-8-15 00:45 编辑
首先 a不是这个二维数组的地址&a 才是二维数组的地址
一个二维数组的 可以想象为一个一维数组然后这个数组的每个元素是一个一维数组(我个人觉得是嵌套数组)。
然后我们知道一个一维数组的名字 就是这个数组的第一个元素的地址 注意是地址。
那么根据这两个可以想象
二维数组的名字(a)是这个一维数组中的第一个元素的地址(这个元素是一维数组)
那么(*a)是这个一维数组中的第一个元素的解引用(就是对一维数组的地址进行解引用,获得这个一维数组中的第一个元素的地址 )
而(**a)就是就是这个数组中的第一个元素的地址解引用(获得值1)
对应到题目
a是第一个一维数组地址 (其实就是&a )
*a是第一个一维数组中的第一个元素(1)的地址 注意是地址 (其实就是 &a)
**a是第一个一维数组中的第一个元素(1)的地址的解引用(其实就是a)为值1
a这个语法糖 就是*(a + 0)
a就是*(*(a + 0) + 0)以此类推
懂的不多,以上为个人的理解,如有错误,请指出。 倒戈卸甲 发表于 2020-8-14 23:20
并不存在专门的二维数组这样一个数据结构,二维数组只是一维数组的线性扩张。简单来说,你定义的这个数组有 ...
好的谢谢你
页:
[1]