数组指针C语言的问题,这道题的cd选项等效成什么?

9.12

知识点:
(1) int (*cp)[5], 这里有小括号,所以 cp 是1个指针,(又叫行指针),注意,是一个指针,后面[5]表示这个指针用于指向有5列的2维数组。 cp=c; 说明,c 是2维数组,它每行有5列元素,现在让cp指向了第一行。 cp=&c[0][0]; 若 cp+j 则指向 第 j 行。
(2) C语言中,方括号实际上也是运算符,记住衡等式 a[i] == *(a+i),用它,可以变换[] 与 *。 这里 *号 是求值。
好了。假定, int c[4][5]={0,1,2,3,4,10,11,12,13,14,
20,21,22,23,24,30,31,32,33,34},(*cp)[5]; cp=c;
变换 9.12 的 c,d:
*(cp+1)+3 = (c[1])+3= &c[1][3]; 是地址。 *(*(cp+1)+3) 是 c[1][3] 的值。
*(*cp+2)= *(*(cp+0)+2)=*(c[0]+2)=c[0][2]; 是元素c[0][2]的值。
我们来输出:
printf ("%d -- %d\n",*(*(cp+1)+3), c[1][3]);
printf ("%d -- %d\n",*(*cp+2),c[0][2]);
输出:
13 -- 13
2 -- 2追问

这里的(c[1]+3)为啥=&c[1][3]?

有人告诉我这里的*是降级的,采用这种降级法来算

这种方法可以么?

温馨提示:答案为网友推荐,仅供参考
相似回答