无法将变量分配给 C 中的外部变量

标签 c pointers extern

为什么这不起作用

extern int externed_variable;
int variable = externed_variable;

尽管如此

extern int externed_variable;
int *variable_ptr = &externed_variable;

我从前者得到的编译器错误是“表达式必须具有常量值”。我正在使用 MSVC。

最佳答案

"expression must have a constant value"

正如错误所示,当您初始化变量时,它应该是常量。

在这种情况下,

extern int externed_variable;
int variable = externed_variable;

您正在使用“变量”进行初始化,并且变量在运行时获取值。

但是当你这样做时:

extern int externed_variable;
int *variable_ptr = &externed_variable;

您正在分配地址,全局变量的地址是在编译时决定的,因此是常量。 并且允许您初始化一个具有常量值的变量。

所以回答你,由于全局变量的地址是在编译期间分配的并且是恒定的,因此你不会得到错误!

关于无法将变量分配给 C 中的外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658188/

相关文章:

c - 错误: return value type does not match the function type

c++ - 从 main 中的双指针函数打印出指针数组

c++ - 将字符指针/数组传递给函数

(Pointer) 指针的 C++ 概念问题

cocoa - 如何存储引用,然后使用 extern NSString const ?

c - 导致 C 崩溃的数组大小

c - fgets 和 readRestOfLine 错误

c - 如何使用字符串声明作为实际成员的表示来调用结构的成员?

c++ - 为什么 EXTERN_C 宏在其 C 形式中遗漏了 `extern`?

c# - MarshalAs(UnmanagedType.LPWStr) 和 Marshal.PtrToStringUni() 之间的区别