指向二维数组的指针

问题描述 投票:0回答:1

考虑以下代码:

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

c pointers putchar
1个回答
5
投票

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

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

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

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

运用

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

可能会更快地揭示问题。

© www.soinside.com 2019 - 2024. All rights reserved.