指向二维数组的指针

时间:2018-08-29 16:58:49

标签: 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;
}

第一和第二个putchar()语句指向第一行的第一个元素,即e(以0为基本位置),而在第3个putchar()语句中,它显示垃圾值。
但是就该语句而言,(*(ptr+1))显然意味着指向第二行。为什么会这样呢?
是由于某些putchar()规范造成的,还是我已经完成了指针的概念?

1 个答案:

答案 0 :(得分:5)

您在最后一行中将错误的类型传递给putchar

(ptr+1)的类型为char (*)[4]
*(ptr+1)的类型为char [4],其衰减为char*
*(ptr+1)+2的类型为char*

指针将转换为某种奇怪的int,它解释了输出-或您说得更清楚的垃圾。

有疑问时,简化代码比怀疑发生了什么更好。

使用

char c = *(ptr+1)+2;
putchar(c);

可能早点发现了问题。