【发布时间】:2014-12-15 16:39:18
【问题描述】:
struct temp{
const int i;
};
如何在 main() 函数中初始化变量“i”?
【问题讨论】:
-
你不能。这是一个常数。或者你可以……但不是真的。
标签: c
struct temp{
const int i;
};
如何在 main() 函数中初始化变量“i”?
【问题讨论】:
标签: c
你不能分配任何东西给一个常量对象。常量对象只能在声明时初始化,如
struct temp t = { 5 };
即你只有一次机会。如果您错过了初始化一个常量对象的机会,那么您就很不走运了——该对象将永远保持未初始化状态。
因此,在通常非常量的结构对象中创建常量字段通常不是一个好主意,除非您真的知道自己在做什么。
这就是它的理论。
在实践中,您有时可能会看到人们诉诸各种“黑客”,而只是忽略了该领域的常数。例如,可以使用memcpy 将整个结构“分配给”。在 C 语言的某些情况下,您别无选择执行类似的操作(例如,使用 malloced 对象,因为 C 语言不提供在此类上下文中提供初始化程序的方法)。
同样,C 语言不太适合处理此类类型,这就是为什么它们应该只在精心规划的上下文中使用。
【讨论】:
您可以在结构初始化器中执行此操作,例如
int main()
{
struct temp tester = { .i = 5 };
}
【讨论】: