我有一个多维数组:

char marr[][3] = {{"abc"},{"def"}};

如果我们在定义上遇到表达式*marr(iso/iec 9899-1999),它会说(我引用)
如果操作数的类型为“指向类型的指针”,则结果的类型为“类型”
在这个表达式中,marr衰减为指向第一个元素的指针,在本例中,这是指向数组的指针,所以当我们有了表达式*marr时,我们得到了大小为3的“type”数组。所以我的问题是,为什么当我们做(*marr)+1时,我们只向地址添加1个字节,而不是向数组大小的3添加字节。
原谅我的无知,我不是一个很聪明的人,我有时会被这样的小事困住。
谢谢你抽出时间。

最佳答案

它添加了一个,因为类型是char(1字节)。就像:

char *p = 0x00;
++p; /* is now 0x01 */

当您取消引用achar [][]时,它将在表达式中用作char *
若要添加3,需要先进行算术运算,然后取消引用:
*(marr+1)

你在做:
(*marr)+1

先取消引用。

10-04 21:57