能否通过类似下标的方法访问结构体中不同类型的成员?
例如里面有10个CHAR,10个INT,两个LONG并且是交叉排列的,我要用一个循环为他赋值,能行不? 你自己找准位置,注意大小端,没什么不可以 可以。用指针指向结构体。下标就可以访问 miaoguoqiang 发表于 2018-5-15 10:10
可以。用指针指向结构体。下标就可以访问
我知道这样是可以的
比如结构体里面全是CHAR
然后用一个CHAR*就可以
但是里面是这样的:CHAR ;INT;LONG;INT;CHAR;呢?
是不是得需要这样,INT = CHAR|CHAR<<8? xiaobendan 发表于 2018-5-15 13:00
我知道这样是可以的
比如结构体里面全是CHAR
然后用一个CHAR*就可以
对的。小端模式就是低位在前 可以写一个数组用来存储每个成员的偏移量 这个问题 测试一下就可以看到结果了吧 不建议写这种 屎一样的代码。
用指针可以访问,但是不建议,可读性非常差,用了结构,就要用结构的访问方式。 小李非刀 发表于 2018-5-15 17:12
用指针可以访问,但是不建议,可读性非常差,用了结构,就要用结构的访问方式。 ...
是啊,结构看起来更清晰
只是突然想到的,比如全是CHAR,然后每个成员都+1,一个循环就OK,要是类型不一样就不能这样了。 本帖最后由 xivisi 于 2018-5-16 10:09 编辑
xiaobendan 发表于 2018-5-16 07:05
是啊,结构看起来更清晰
只是突然想到的,比如全是CHAR,然后每个成员都+1,一个循环就OK,要是类型不一 ...
楼主1W积分?
反正都是 char;long
直接一个结构体指针不就行了?
struct{char a; int b;} *temp;
然后再循环, 如果不是成对出现,最后一个单独处理就行
=====================================================================
好吧,我没看全,
存储偏移地址吧,只有这样 xivisi 发表于 2018-5-16 10:06
楼主1W积分?
反正都是 char;long
偏移地址是自己一个一个搞
还是有什么方法自动获取? xivisi 发表于 2018-5-16 10:06
楼主1W积分?
反正都是 char;long
关键是很乱,比如有100个成员,乱排列的,比如5个char,10个 int,15个long,之后又是3个char,2个long,5个char,6个long…… xiaobendan 发表于 2018-5-16 10:30
关键是很乱,比如有100个成员,乱排列的,比如5个char,10个 int,15个long,之后又是3个char,2个long,5 ...
offsetof() xivisi 发表于 2018-5-16 10:32
offsetof()
这个怎样用? xiaobendan 发表于 2018-5-16 10:35
这个怎样用?
offsetof你可以搜索的……
offsetof的作用是取一个结构体中成员的偏移量,会得到一个常数。
按你的原始结构体定义,获取所有成员的偏移量,也可以相邻相减得到当前的成员的大小,就得到数据类型,根据这个类型,进行赋值。 xivisi 发表于 2018-5-16 10:41
offsetof你可以搜索的……
offsetof的作用是取一个结构体中成员的偏移量,会得到一个常数。
这个在keil c51中有?
是不是还是得一个一个的取出来放到一个数组中,然后再搞 10个CHAR,10个INT,2个LONG,可以用结构体联合体方式解决。
//变量结构体
typedef struct
{
char charVar;
int intVar;
long longVar;
}VAR_STRU;
//变量联合
typedef union
{
char byte; //在联合中设置一个数组变量,10+10*2+2*4
VAR_STRUData; //结构体数组变量
}VAR_UNION;
VAR_UNION user;
/////操作变量,比如清零/////
直接清零联合中的值:
for(i=0;i<28;i++)
{
user.byte=0;
}
单独清除某个值:
user.Data.charVar=0;
其它操作以此类推。 如果内部成员交叉排列,自己制作表格取得对应位置操作即可。
页:
[1]