指向二维数组的指针

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()规范,还是我完成了指针概念?

R S*_*ahu 5

您将错误的类型传递到putchar最后一行.

类型(ptr+1)char (*)[4].
类型*(ptr+1)char [4],衰变到char*.
类型*(ptr+1)+2char*.

指针转换为一些奇怪的int,这解释了输出 - 或垃圾,因为你更清楚地说.

如果有疑问,最好简化代码而不是想知道发生了什么.

运用

char c = *(ptr+1)+2;
putchar(c);
Run Code Online (Sandbox Code Playgroud)

可能会更快地揭示问题.