指向二维数组的指针
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);
可能会更快地揭示问题。
以上是关于指向二维数组的指针的主要内容,如果未能解决你的问题,请参考以下文章