C语言,有以下程序段:

2024-11-30 18:42:07
推荐回答(5个)
回答1:

选择A

其实数组的实现就是顺序存储的线性的一维的链表,
不论是几维数组。
所以用一维指针ptr指向二维数组a,其实就是根据上述原理,
来通过二维数组首地址和各数组成员的偏移量来实现数组的访问的。

*ptr:就是二维数组a的首地址对应的成员,此时指向的是a[0][0],也就是1
*(ptr+2) :就是二维数组a的首地址偏移2个int对应的成员,此时指向的是a[0][2],也就是3
*(ptr+4):就是二维数组a的首地址偏移4个int对应的成员,此时指向的是a[0][2],也就是5

所以m值为:1*3*5=15
选A

再说一句,
你这个书太多错误了,你刚才那几个帖子我也都看了

回答2:

*p是一个指针,它所代表的是一个位置,在这里*p=a表示指针p指向a所在的位置,也就是a所存储的地址,所以如果输出*p的值是一串数字。
*p++的意思是在这个当前的地址上+1,即指针指向下一个存储位置。
你这里所做的a[i]=*p++其实是做地址的变换。
你如果做a[i]=*++p那么就会出现乱码,那个乱码所代表的就是*p所指向的位置。
结果是6
还要详细一点吗?

回答3:

a[i]=*p++;
是先a[i]=*p然后p再指向下数组一位
所以你的那个for循环并没有改变数组a

回答4:

*p++即为(*p)++,程序先算*P=2,然后++后为3;
即输出3.

回答5:

输出结果6
a[2]被初始化为6啊,你输出的当然是6了.