C语言的一道判断题:16 谢谢 帮我看下

来源:百度知道 编辑:UC知道 时间:2024/07/01 03:57:03
若有定义double(*p)[4];则p是行指针,p占一个存储单元

这句话对吗?

错。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个元素