首页 > 解决方案 > 结构上的常量

问题描述

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 。

标签: cconstants

解决方案


类型Person1和是和Person3的别名。这意味着任何类型的变量或不能在初始化后修改(以及扩展它们的任何字段)。但是,类型为or的变量可以被修改,前提是它们没有使用限定符声明。const struct Person1const struct Person3Person1Person3struct Person1sturct Person3 const

的实例Person2可以修改。特别是,name可以修改,因为它不是const即使它指向的是。但是,对于(and ) 的任何实例,该id字段都不能修改,因为它是。这同样适用于。Person2struct Person2conststruct Person3


推荐阅读