考虑以下代码:
int main()
{
static char wer[3][4] = {"bag","let","bud"};
char (*ptr)[4] = wer;
putchar(*(*(ptr+1)+2));
putchar(*(wer[1]+2));
putchar(*(ptr+1)+2);
return 0;
}
第一和第二个putchar()语句指向第一行的第一个元素,即e
(以0为基本位置),而在第3个putchar()语句中,它显示垃圾值。
但是就该语句而言,(*(ptr+1))
显然意味着指向第二行。为什么会这样呢?
是由于某些putchar()
规范造成的,还是我已经完成了指针的概念?
答案 0 :(得分:5)
您在最后一行中将错误的类型传递给putchar
。
(ptr+1)
的类型为char (*)[4]
。
*(ptr+1)
的类型为char [4]
,其衰减为char*
。
*(ptr+1)+2
的类型为char*
。
指针将转换为某种奇怪的int
,它解释了输出-或您说得更清楚的垃圾。
有疑问时,简化代码比怀疑发生了什么更好。
使用
char c = *(ptr+1)+2;
putchar(c);
可能早点发现了问题。