奇怪的const问题
typedef struct MSG_s{int a;
int b;
} MSG_t;
int tmp = 0;
//定义两个不同初始化形式的变量
const MSG_t msg = {0,0};
const MSG_t cmd = {0,tmp};
int main(int argc, char* argv[])
{
MSG_t * ptr = (MSG_t*)&msg;
//显示tmp地址
printf(" tmp :%d\n", &tmp);
// 显示msg变量修改前后的值
printf("Old: msg = {%d, %d}\n", msg.a, msg.b);
//ptr->a = 3;
//ptr->b = 5;
printf("New: msg = {%d, %d}\n", msg.a, msg.b);
// 显示msg相关变量的地址
printf("****msg Addr***\n");
printf(" msg :%d\n", &msg);
printf("msg.a:%d\n", &(msg.a));
printf("msg.b:%d\n", &(msg.b));
printf(" ptr :%d\n", ptr);
ptr = (MSG_t*)&cmd;
// 显示cmd变量修改前后的值
printf("Old: cmd = {%d, %d}\n", cmd.a, cmd.b);
ptr->a = 3;
ptr->b = 5;
printf("New: cmd = {%d, %d}\n", cmd.a, cmd.b);
// 显示cmd相关变量的地址
printf("****cmd Addr***\n");
printf(" cmd :%d\n", &cmd);
printf("cmd.a:%d\n", &(cmd.a));
printf("cmd.b:%d\n", &(cmd.b));
printf(" ptr :%d\n", ptr);
return 0;
}
这段代码中为什么msg变量不可修改,而cmd可以?
屏蔽掉对msg的修改后显示内容为:
tmp :4357464
Old: msg = {0, 0}
New: msg = {0, 0}
****msg Addr***
msg :4337712
msg.a:4337712
msg.b:4337716
ptr :4337712
Old: cmd = {0, 0}
New: cmd = {3, 5}
****cmd Addr***
cmd :4357472
cmd.a:4357472
cmd.b:4357476
ptr :4357472