C语言的一道判断题:16 谢谢 帮我看下
来源:百度知道 编辑:UC知道 时间:2024/07/01 03:57:03
这句话对吗?
错。p是一个长度为4的数组的指针
对的
double(*p)[4];
定义了一个数组,
包含4个成员,每个成员为一个指针,p为第一行的行首指针
在C中一定要区分两个概念:指针数组与数组指针,两者是绝对不同的。
这个的定义就是定义了一个长度为4的指针数组,换句话说,就是这四个数组元素的本身的就是指针,就是说每个元素是一个指针,这种情况多见于建二维以上的多维数组而出现的!
而数组指针则是指的该数组有一个指针指向这个数组。很明显,这里的概念是指针数组而非数组指针。也就是说你建立了四个指针,四个指针一般都要初始化为一个数组的指针。
C语言的机制是很明确的,延伸出去的话,就是对于广义表的处理了!广义表不同于二维表的。
double array1[4][5];这当然是一个二维的数组。
这样呢?
double array0[2];
double array1[5];
double array2[8];
double array3[3];
这四个数组为了使用方便也建立成一个数组,难道要用
double arraytotal [4][8]
这样不是要32个存储单元?实际中我们只使用了18个,浪费掉了14个嘛!
其实这时可以建立指针数组:
double (*p)[4]
然后将这四个指针分别指向一个数组,也就是说每一个指针又相当于各个数组的指针。数组指针是不占空间的,也就是说每一个*p不在各个数组中点用指针。但指针数组却是为指针而开辟空间的数组,是要点用空间的。每一个*p在指针数组中是点用一个空间的!所以说P是行指针。C这样的理论是节省了空间,共用了加上针指在内的22个空间就行了,这是不同于二维数组的区别!显然也是C对广义表的处理上的能力。
P是占用了一个存储单元!占用了typeof(double)个字节!
所以说这一句话是正确的!
对的。p就是这个指针数组的第一个指针
对!
1.先看: double a[4]; (a有4个元素