提问人:Randolf 提问时间:9/9/2015 更新时间:9/9/2015 访问量:84
C:数组元素引用编译器实现是特定的吗?
C: Is array element referencing compiler implementation specific?
问:
我经常看到以下语法用于 C 数组元素引用:
int someArray[10];
(void*) a = &someArray[x];
这似乎使某些编译器(例如 MinGW)按 sizeof(int) 递增地址,而对于其他编译器(Texas Instruments)则按 sizeof(void*) 递增地址。
将其更改为似乎可以解决这个问题。(void*) a = &(someArray[x])
问题出在哪里? 标准中是否未定义“&”和“[x]”的优先级? 可移植代码的最佳实践是什么?
谢谢! 兰道夫
答:
0赞
sqr163
9/9/2015
#1
此代码没有问题:
int someArray[10];
void *a = &someArray[x];
适当的编译器将根据 sizeof(someArray[0]) 递增指针。
也许,你不应该问“如何编写可移植代码”,而应该问如何编写即使使用野生编译器编译也能正常工作的代码......
评论
(void*) a = &someArray[x];
(void *)(a = &someArray[x])
[]
&