【发布时间】:2017-10-11 10:33:00
【问题描述】:
我尝试了以下代码
char arr[5] = {'A', 'E', 'I', 'O', 'U'};
char (*p_arr)[1] = &arr;
printf("%c\n", p_arr[0][4]); //returns 'U'
在thisstackoverflow 线程上,
char (*p_arr2D)[m] = &arr2D //or arr2D
也是n*m 二维数组arr2D 衰减的语法,返回指向其第一个元素的指针,即m 元素的数组。
p_arr[0] 似乎是“反向”数组衰减,从指向数组的指针中检索二维数组。怎么会这样?在上面的代码 sn-p 中,p_arr 是否被解释为 1*5 数组(来自具有 5 个元素的原始一维数组)?
【问题讨论】:
-
我的错,我把我原来的问题分成两半,忘了在这部分把
char (*p_arr)[1] = &arr;改成char (*p_arr)[5] = &arr;。但是,char (*p_arr)[1] = &arr;不会产生任何编译错误(请参阅我的 other question),我不明白为什么。 -
(C 编译器不会阻止你想做什么。)用
-Wall选项编译它。 -
我回滚了代码更改。一旦发布了答案,请不要修复您的代码。通过修复它,您使大多数答案变得无关紧要。相反,如果您有后续问题,请提出一个新问题(就像您所做的那样)。
标签: c pointers multidimensional-array