mus*_*gDC 0 c pointers putchar
考虑以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
第一个和第二个putchar()语句指向第一行的第一个元素ie e(考虑0作为基本位置),而在第3个putchar()语句中,它显示垃圾值.
但就声明而言,(*(ptr+1))显然意味着指向第二排.为什么会这样?
这是由于某些putchar()规范,还是我完成了指针概念?
您将错误的类型传递到putchar最后一行.
类型(ptr+1)是char (*)[4].
类型*(ptr+1)是char [4],衰变到char*.
类型*(ptr+1)+2是char*.
指针转换为一些奇怪的int,这解释了输出 - 或垃圾,因为你更清楚地说.
如果有疑问,最好简化代码而不是想知道发生了什么.
运用
char c = *(ptr+1)+2;
putchar(c);
Run Code Online (Sandbox Code Playgroud)
可能会更快地揭示问题.