【发布时间】:2014-05-30 04:24:32
【问题描述】:
下面是一个示例,我尝试将 const 指针分配给结构中的 const 指针,但编译器不会让我这样做。但是我可以毫无问题地分配文字。如果您知道我的意思,我也尝试过没有任何 const 和一些 const 的情况,但我仍然不明白为什么编译器对文字很酷,但作为分配中的 char* 问题。
const char* cat_surname = "Snack";
typedef struct
{
const char* first;
const char* last;
}PET_T;
PET_T dog =
{
"Rover", // OK
"Cateater" // OK
};
PET_T cat =
{
"Tasty", // OK
cat_surname // ERROR :-(
};
我得到这个编译器错误:
错误:初始化元素不是常量
使用 Arch Linux gcc 版本 4.8.2 20140206 (prerelease) (GCC)
【问题讨论】:
-
const-qualified 对象不是编译时常量。 -
建议
const char cat_surname[] = "Snack"; PET_T cat = { "Tasty", cat_surname }; -
您可能应该将其发布为答案@chux ...理由是文件范围对象的地址算作常量;所以这里的
cat_surname衰减为链接器能够填写的&cat_surname[0]。 -
@chux 谢谢,这行得通!在旁注中,我不小心单击了两次向上箭头(upvote/downvote),现在它不会让我永远支持它。很抱歉,但感谢您的帮助。