指向二维数组的指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指向二维数组的指针相关的知识,希望对你有一定的参考价值。

考虑以下代码:

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

答案

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

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

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

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

运用

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

可能会更快地揭示问题。

以上是关于指向二维数组的指针的主要内容,如果未能解决你的问题,请参考以下文章

指向二维数组的指针

二维数组名不能赋值给二级指针- -

C语言指针指向一维数组与二维数组?

C语言指向二维数组的指针

C语言 指向二维数组的指针

C语言如何定义指针指向字符型二维数组