关于二维数组名是什么
小弟不才,之前一直单纯的认为二维数组名就是一个二级指针,可前段时间在写一个程序时发现二维数组传参形参不能写作二级指针的形式,而应该写作一个数组指针的形式,可是数组指针不是一个一级的指针吗,而且指向数组的宽度还是二维数组的列而不是行,那就说明这个数组指针里面的元素不是行指针了,那么二维数组名到底是个什么东西呀,求各位高手解答,不胜感激! 不管是一维数组还是N维数组,数组名都只是相当于指向于数组首个元素的地址的指针. bin554385863 发表于 2019-5-23 20:44不管是一维数组还是N维数组,数组名都只是相当于指向于数组首个元素的地址的指针.
那么就是说一维数组或n维数组的数组名就是一个数组指针吧,那么请问一下为什么数组指针作为一个一级指针,像二维数组能够进行两次解引用呢? 447908543 发表于 2019-5-23 23:26
那么就是说一维数组或n维数组的数组名就是一个数组指针吧,那么请问一下为什么数组指针作为一个一级指针 ...
数组名作为指针只能指向数组的首个元素,你说的二次引用,没有代码我也不懂你说的什么意思 bin554385863 发表于 2019-5-24 00:35
数组名作为指针只能指向数组的首个元素,你说的二次引用,没有代码我也不懂你说的什么意思
感谢解答!我又结合了一些相关资料看了一下,大概是说二维数组名只是一个数组指针,但是数组指针不仅仅是指向数组的首元素,而是指向整个数组,这样也就能够解释数组指针能够通过双重解引用取值了,现在许多c语言教科书上关于二维数组名都是模棱两可地描述为一个二级指针,感谢解答! 我来说说我的理解:
对内存空间来讲,二维数组由连续的一维数组拼接而成,中间没什么特殊标记,内存存储上和一维数组没什么区别。
二级指针指向首个一维数组的首元素地址,但它不知道每个一维数组的长度,那么问题就来了。比方说,一个int **p,它只知道每个数据都占用一个int的大小,而不知道一维数组的长度,它不知道第二个一维数组从哪里开始检索。比方说,我告诉你一个数10,而不告诉你进制,你知道这个数里的1代表的是二进制的2,还是八进制的8还是十进制的10吗?
而数组指针,它能指明每个一维数组的长度,比方说int (*p),它知道每个数组是由5个int值构成的,你要找第二个数组的第二个元素,那程序就知道先跳过二维数组的前5个元素,从第六个元素开始数。
个人理解
页:
[1]