打印

请教结构体的理解

[复制链接]
1661|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
渤海三叠浪|  楼主 | 2011-6-15 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定义了一个结构体类型

typedef struct {
     INT8U             a;
     INT8U             b;
}  Parm_g;

定义全局变量

parm_g     C;

程序主循环中需要对变量C的成员b的值进行改变,C成员a的值不变。

由于我程序需要大量的全局变量,所以这种结构体类型定义方式消耗大量内存。因此我寻思这样定义结构体类型:
typedef struct {
     INT8U             a;
     INT8U             b;
}  code Parm_g;
定义全局变量
parm_g     C;

这样定义了以后,结果编译就提示不允许改变C的值.
编译器这种行为是不是太霸道了??好好想想似乎也不霸道!

那么只把a放到code里面 b不放到code里面 咋实现?

嗨,谁还有别的更好的方法了么?????

多谢指点啊

相关帖子

沙发
原野之狼| | 2011-6-15 10:24 | 只看该作者
不是编译器霸道!
既然是code了,就不能修改了。
拆分倒是可以,但是咋看咋别扭,也许你该重新审视下你的程序架构。

使用特权

评论回复
板凳
ayb_ice| | 2011-6-15 10:31 | 只看该作者
放在CODE区了,当然不可以改变了

使用特权

评论回复
地板
yewuyi| | 2011-6-15 10:33 | 只看该作者
定义了一个结构体类型
typedef struct {
     INT8U             a;
     INT8U             b;
}  Parm_g;
定义全局变量
parm_g     C;
程序主循环中需要对变量C的成员b的值进行改变,C成员a的值不变。
-------------------------------------------------
RE:如果是始终不变,则应该定义为常量。
-------------------------------------------------
由于我程序需要大量的全局变量,所以这种结构体类型定义方式消耗大量内存。
-------------------------------------------------
RE:你定义多少变量就开销多少内存,这哪有什么闲话?
-------------------------------------------------
因此我寻思这样定义结构体类型:
typedef struct {
     INT8U             a;
     INT8U             b;
}  code Parm_g;
定义全局变量
parm_g     C;
这样定义了以后,结果编译就提示不允许改变C的值.
编译器这种行为是不是太霸道了??好好想想似乎也不霸道!
--------------------------------------------------
RE:不知道你用的什么编译器,但看样子,你这个code关键字应该是想定义为常量,放到ROM中,如果是这样,不容许你改则是必然的,这怎么能是编译器霸道呢?你想改它,则是因为你瞎搞而已。
--------------------------------------------------
那么只把a放到code里面 b不放到code里面 咋实现?

嗨,谁还有别的更好的方法了么?????
-------------------------------------------------
RE:常量有两种,一种是放在ROM中的,一种是放在RAM中的,如果你想定义一个结构,里面既有ROM中常量,又想定义放到RAM的变量,那没听说有什么好办法。因为这根本就是扯。。。
-------------------------------------------------

使用特权

评论回复
5
渤海三叠浪|  楼主 | 2011-6-15 10:40 | 只看该作者
定义了一个结构体类型
typedef struct {
     INT8U             a;
     INT8U             b;
}  Parm_g;
定义全局变量
parm_g     C;
程序主循环中需要对变量C的成员b的值进行改变,C成员a的值不变。
-------------------------------------------------
RE:如果是始终不变,则应该定义为常量。
-------------------------------------------------
由于我程序需要大量的全局变量,所以这种结构体类型定义方式消耗大量内存。
-------------------------------------------------
RE:你定义多少变量就开销多少内存,这哪有什么闲话?
-------------------------------------------------
因此我寻思这样定义结构体类型:
typedef struct {
     INT8U             a;
     INT8U             b;
}  code Parm_g;
定义全局变量
parm_g     C;
这样定义了以后,结果编译就提示不允许改变C的值.
编译器这种行为是不是太霸道了??好好想想似乎也不霸道!
--------------------------------------------------
RE:不知道你用的什么编译器,但看样子,你这个code关键字应该是想定义为常量,放到ROM中,如果是这样,不容许你改则是必然的,这怎么能是编译器霸道呢?你想改它,则是因为你瞎搞而已。
--------------------------------------------------
那么只把a放到code里面 b不放到code里面 咋实现?

嗨,谁还有别的更好的方法了么?????
-------------------------------------------------
RE:常量有两种,一种是放在ROM中的,一种是放在RAM中的,如果你想定义一个结构,里面既有ROM中常量,又想定义放到RAM的变量,那没听说有什么好办法。因为这根本就是扯。。。
yewuyi 发表于 2011-6-15 10:33



加了--------------------,格式变得很清晰啊.............

使用特权

评论回复
6
渤海三叠浪|  楼主 | 2011-6-15 10:44 | 只看该作者
暂定这样搞

typedef struct {
     INT8U             a;
     INT8U             b;
}  Parm_g;

定义全局变量

parm_g     C;

然后再定义个机构体 用于取代成员b的作用

使用特权

评论回复
7
原野之狼| | 2011-6-15 10:47 | 只看该作者
嘿嘿 技术水平要提升 就不能凑合哦~

使用特权

评论回复
8
johnwjl| | 2011-6-15 14:39 | 只看该作者
本帖最后由 johnwjl 于 2011-6-15 14:41 编辑

兄弟,不霸道!
为什么非要放在同一个结构体呢?分开放是否更合理?如下:
typedef struct {
    INT8U   a1
    INT8U   a2   
    INT8U   a3
    INT8U   an
} struct_t;

struct_t  v_ram;
code struct_t  v_code;

这样用:   v_ram.a1 = v_code.a1;
              v_ram.a2 = v_code.a2;
              v_ram.a3 = v_code.a3;
              v_ram.an = v_code.an;

不知能否满足LZ的需求?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

637

帖子

1

粉丝