指向二维数组的指针

Pointer to two dimensional array

考虑以下代码:

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 视为基本位置),而在第三个 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);

可能早点发现问题。