C语言 结构体声明中const成员如何初始化

typedef const struct{ const int n; }A;
const int num = 7;
A a = { num };
报错! c的编译环境,请高手指教阿!!!

const成员必须在定义的时候同时初始化,而不能在后续再进行赋值。

结构体定义时初始化的方法为:
struct type_name var_name = {value1, value2, ...};
其中type_name为结构体类型名,var_name为结构体变量名。=后面的大括号中,是各个成员变量的初始化值,根据成员变量的定义顺序一一对应。在初始化变量表内没有显式定义的,系统默认初始化值为0。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16
//估计是你的分号问题,不能是中文符号,程序只支持英文符号
#include <stdio.h>
typedef const struct{ const int n; }A ;
int main()
{
const int num = 7;
A a = { num };
printf("a=%d\n" , a.n );
system("pause");
return 0;
}
以上在windows dev C++编译器下测试通过追问

都说了要在c环境下编译阿,c++可以编译早晓得了。。。不是什么;号之类的低级错,就想知道有没有办法在num前面cast个什么让它成功

追答

呵呵,那是编译器的名字 DEV C++
写的程序就是用C编译运行的。
现在的较新版本的C编译器都支持上面的程序写法
不知道你用的是什么编译器?

追问

最底层烧芯片的纯c环境专用编译器,上层一点点的神马带有兼容c++的那些为了写类阿框架阿什么的就不用吭声了

本回答被网友采纳
第2个回答  2013-03-16
学习了
c语言结构体变量尽量不要用const
C语言的任何const变量都不能用const变量初始化,这是C语言和C++的一个很大的不同……追问

大侠,谢谢了,现在我A a={ num}的这个num 必须是个 const 所以想请教下,能否 在 num前面cast个什么东西 让它编译通过,c环境,不是c++环境。而且,还有种情况,我删除了typedef const struct{ const int n; }A中的const,然后编译,报的错都一样,说是expression must have a constat value。还望大侠不吝赐教阿。。。拜谢

追答

const变量必须在定义是初始化,以后其值不可以改变
你可以把程序贴出来看一下

追问

你说的这句都知道阿,代码就是上面这个,只是把别的成员都删了,名字改了下方便理解,要实装的办法我有,只不过简单改下num=7的定义方式改成宏定义就行,我现在就三不想改这个定义,就想const int num = 7,所以才问有没有什么方法。比如改A的结构体定义

追答

typedef const struct{ const int n; }A;改成typedef const struct{ int n; }A;试试

追问

在第一个追问里就说过了,没用报的一样的错,原因我猜是typedef const struct 中的const开辟的地址空间都是const的类型,所以在声明时候,再给 const num 就不行了。不过,我也试过把const num 改成 int num 在 typedef const struct{ int n; }A;的情况下运行,居然还是报一样的错,所以一头雾水才上来问问。。。

追答

typedef const struct{ const int n; }A;
A a = { const int num = 7 };
如何

第3个回答  2021-07-24
因为你定义的const结构体变量是全局变量属于静态存储区只能赋值常量值不能赋值变量本回答被网友采纳
第4个回答  2013-03-16
C语言的任何const变量都不能用const变量初始化,这是C语言和C++的一个很大的不同……
相似回答