本人第一次在51CTO上发表博客,可能会有一些错误,希望各位大神多多指点!好了,闲言少续,我们进入主题:
在C语言中,有很多数据类型(Int、Float、Char...),那么数组是一种构造类型的数据,个人认为数组是一组具有相同数据类型的数据集合。目前,我们常见的数组为一维、二维的数组。 本文以二维数组为题,首先,我们看一段代码 !
通过代码,我们知道*(P+1),P+1的值是相同的,但含义不同,先说P+1,无论是一维还是二维数组,数组名都可表两层含义:1、指向其起始元素(a[0])的指针;2、表示自身所占的内存(sizeof(a));本文主要以第一层含义为主,二维数组名a,a代表的是二维数组中第一个元素a[0]的地址,即&a[0],而不是数组本身的地址,数组本身地址用(&a)来表示。 由于,有int (*p)[3]=a;说明这个数组指针指向了二维数组中第一个元素(a[0]这个数组),注意是指向,那么p+1,也就是指向了a[1]这个数组,(p的类型为int (*)[3]),由此可知,*(p+1)是p+1所指向空间的内容,那么,这个内容是什么呢?在二维数组中,运算结果得到了一个一维数组,那么能够代表数组整体的只有数组名,一维数组名代表的是其首元素的首地址,而不代表一维数组的地址,也就是&a[1][0],那么*(p+1)=&a[1][0];
通过,代码可以看出,推论是正确的。那么如果想取二维数组中的数值,我们可以再进行一次“*”运算,也就是*(*(p+1))即*(&a[1][0]);如代码所示 !
这就是我个人的愚见,如果哪里有不对的,烦请各位大神指点一二。
时间: 2024-10-21 09:17:12