C语言如何修改const结构体内的变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何修改const结构体内的变量相关的知识,希望对你有一定的参考价值。

typedef struct

uint32_t a1;
uint8_t a2;
uint16_t a3;
A;
const A EXP=

0;
0,
0;
;
如何才能修改EXP中的3个变量?不取出const修饰符的情况下。

scanf("%d",&EXP.a1);
scanf("%d",&EXP.a2);
scanf("%d",&EXP.a3);
然后从终端输入就可以修改变量的值了。
这个方法可能不符合你的要求,要有更好的办法我再分享给你,
不过既然是定义为const,那么最好不要随便修改,人家这么声明肯定是有意的!
突然想到更好的办法了:
int *p=(int *)&hello;
*p=1; //可以修改a1的值
p=(char *)&hello.a2;
*p=2; //可以修改a2的值
p=(unsigned int *)&hello.a3;
*p=3;//可以修改a的值
你试试看!
参考技术A 1、不能修改const修改的变量。
2、const 表示常量,相当于宏定义,只能读取,不能修改。

常变量:const 数据类型 符号常变量 = 数值
如:const float PI=3.14;

指针常量:
数据类型 *const 指针变量=变量名
如:char *const p="abc";
const修饰的是指针变量,而不是指针的值,所以指针指向的值是可以修改的。

常指针:
const 数据类型 *指针变量=变量名
或者是
数据类型 const *指针变量=变量名
这是指针指向的值就是不可以改变的。

还有一种情况就是指针变量本身不可以修改,指针指向的值也是不允许修改的,就是指针常量和常指针组合,这种称为
常指针常量:
const 数据类型 *const 指针变量=变量名

数据类型 const *const 指针变量=变量名
参考技术B

该代码在VC++ 6.0和CFee 5.0下可以正常运行。

#include <stdio.h>
#include <string.h>

typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;

typedef struct 
uint32_t a1;
uint16_t  a2;
uint8_t a3;
A;

int main() 
const A EXP = 0,0,0;
printf("0X%04X 0X%04X 0X%04X\\n",EXP.a1,EXP.a2,EXP.a3);
A *p = (A *)&EXP;
p->a1 = 0XAADDFF;
p->a2 = 0XAA88;
p->a3 = 'A';
printf("0X%04X 0X%04X 0X%04X\\n",EXP.a1,EXP.a2,EXP.a3);
return 0;

本回答被提问者和网友采纳
参考技术C 强制类型转换。
A& b = ((A&)EXP);
或者
A* b = (A*)&EXP;

然后就可以修改了

以上是关于C语言如何修改const结构体内的变量的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何在多个c文件里同时使用一个结构体?

C语言结构体指针成员所指向的变量如何访问?

C语言,结构体问题?所占内在字节数,怎么算的???

c语言字符串赋值给结构体内字符串数组的问题

C 语言结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )

c语言结构体怎么判断是不是为空