c - 结构上的常量
问题描述
const
执行以下三种定义结构的方式有什么区别:
#include <stdio.h>
const typedef struct Person1 {
char* name;
int id;
} Person1;
typedef struct Person2 {
const char* name;
const int id;
} Person2;
const typedef struct Person3 {
const char* name;
const int id;
} Person3;
void main(void) {
Person1 p1 = {"John", 1};
Person2 p2 = {"John", 1};
Person3 p3 = {"John", 1};
printf("%s %s %s", p1.name, p2.name, p3.name);
}
每个都提供了哪些特定的保证?这是编译器输出的示例:https ://godbolt.org/z/MWdcaz 。
解决方案
类型Person1
和是和Person3
的别名。这意味着任何类型的变量或不能在初始化后修改(以及扩展它们的任何字段)。但是,类型为or的变量可以被修改,前提是它们没有使用限定符声明。const struct Person1
const struct Person3
Person1
Person3
struct Person1
sturct Person3
const
的实例Person2
可以修改。特别是,name
可以修改,因为它不是const
即使它指向的是。但是,对于(and ) 的任何实例,该id
字段都不能修改,因为它是。这同样适用于。Person2
struct Person2
const
struct Person3
推荐阅读
- python - 具有“持续时间”变量的累积图
- angular - Angular Amplify init Cognito:默认情况下缺少配置文件配置
- python - 当 nan==nan 为 False 时,为什么 (nan,)==(nan,) 为 True?
- firebase - 如何向firebase中的列表字段添加值?
- python - Django(REST 框架)每隔一个调用返回一个空列表
- php - 为什么会话变量为空导航下一页?
- flutter - 如何将提供程序与地图一起使用,以便每个小部件都在听该地图中的不同键?
- python - 如何在Django中显示小于特定数字的值
- python - 使用二维数组列表搜索函数 Python
- docker - 我可以在 Docker Compose 中创建相应的副本吗?