下面两段代码做同样的事情:
void foo(int *num) {...}
int main(void)
{
int num = 5;
foo(&num);
...
}
void foo(int *num) {...}
int main(void)
{
int *num;
*num = 5;
foo(num);
...
}
在这两种情况下,foo 都需要一个指向 int 的指针参数。首先,我声明了一个 int 并使用地址运算符 (&) 将其传递给 foo。在第二个中,我声明了一个指针变量并将其直接传递给 foo。
除了风格偏好之外,是否有使用其中任何一个的理由?我更喜欢将所有变量声明为指针,如第二个,但我更频繁地看到第一个。
最佳答案
不,这两个片段做的事情截然不同。第一个片段是格式正确的代码。第二个片段是由于取消引用未初始化的指针而导致的未定义行为。
第二个版本在执行时可能会崩溃或做一些其他不需要的事情。此外,在任何现代编译器上编译时都带有警告,它会显示警告,例如:
warning: variable 'num' is uninitialized when used here [-Wuninitialized]
关于c - 将所有变量声明为指针与在 C 中使用地址运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55069075/