【发布时间】:2014-11-22 23:02:41
【问题描述】:
在 C 中,“数组语法”只是指针语法的语法糖。那是
a[4] 转换为 *(a+4)。
但这并不总是正确的。
下面肯定是荒谬的,
int a[4] = {1,2,3,4};
int *(a+4) = {1,2,3,4};
这不会编译。
无论如何,我想知道是否有人对这种差异有任何见解。对我来说,拥有两种不同类别的语法似乎很奇怪。一份声明,一份实际使用。
这是怎么回事?
【问题讨论】:
-
你的第二行应该更像:
int *a = malloc(sizeof(int) * 4); a[1] = 1; a[2] = 2;...etc... -
除了 SnakeDoc 的正确注释之外,您还有其他实例,其中不止一种语法是正确的。 V.g.,
(*myPointerToStruct).myMember与myPointerToStruct->myMember相同。或者,数组a[0]与*a相同(第一种形式更好)
标签: c arrays pointers syntax declaration