指向二维数组的指针
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);
可能早点发现问题。
考虑以下代码:
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);
可能早点发现问题。