在浏览一些用 C 编写的软件时,我遇到了以下代码,我可以将其总结如下:
void fill_array_with_some_data(int *_)
{
// assign some arbitrary int values to _[0] and _[1]
_[0] = 42;
_[1] = 24;
}
int main(int argc, char **argv)
{
int x[2] = {0};
fill_array_with_some_data(&x[0]);
// do something with the data which is now is x
if (x[0] & 0x42)
// do something
return 0;
}
看到 &x[0]
而不是简单的 x
对我来说似乎很奇怪。
两者有什么区别吗?
是否有任何理由希望使用 &x[0]
而不是简单地使用 x
?
最佳答案
除了风格之外没有任何区别。
将 &x[0]
作为参数传递可能表明程序员只希望函数访问第一个元素,而传递 x
则意味着他们希望函数访问第一个元素访问整个数组。但这仅仅是约定俗成的,问题中给出的代码示例显然甚至不遵守此约定。
就语言标准而言,表达式是完全等价的,至少在计算上下文中(sizeof
除外):&x[0]
是简写对于 &*(x + 0)
,可以简化为 &*x
,然后是 x
。
关于c - C中的 "x"和 "&x[0]"有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71893350/