【发布时间】:2015-12-05 02:57:15
【问题描述】:
我经常看到以下语法用于 C 数组元素引用:
int someArray[10];
(void*) a = &someArray[x];
这似乎使用一些编译器(例如 mingw)将地址增加 sizeof(int) 并使用其他编译器(德克萨斯仪器)增加 sizeof(void*)。
将其更改为 (void*) a = &(someArray[x]) 似乎可以解决此问题。
问题在哪里? 标准未定义“&”和“[x]”的优先级吗? 可移植代码的最佳做法是什么?
谢谢! 兰道夫
【问题讨论】:
-
鉴于
(void*) a = &someArray[x];无效,我怀疑你经常看到这种情况。 -
对,抱歉,我只是想比喻一下。我的意思是 void *a; int someArray[10]; a = &someArray[x];或 someFunction(&someArray[x])
-
发布一个真实的(不是比喻的)例子来说明问题。括号不会产生影响。
-
有趣的是,高达 3.x 的 gcc 有一个 generalized lvalues 扩展名。以上将被解释为
(void *)(a = &someArray[x])。幸运的是,gcc 4 及更高版本不再支持。是的,[]的偏好高于&。如果编译器做的不同,编译器就坏了。 -
请展示您直接观察到的内容(即这是一个独立的程序,这是它在平台A上的输出,这是它在平台B上的输出)。
标签: c arrays pass-by-reference