请教:结构体嵌套如何使用指针逐一访问每一字节
本帖最后由 磊磊映画 于 2016-3-9 11:05 编辑/*
**level = 0; 没配置过,不存在
**level = 1; 普通联系人
**level = 2; VIP重要联系人
*/
typedef struct {
u8 level;
u8 phone_num;
} INFO_ContactsDef;//联系人信息
typedef struct {
u8 contacts_num;//联系人的个数
INFO_ContactsDefINFO_CONTACTS;//定义十位联系人
}DEVICE_ContactsDef;//设备联系人
DEVICE_ContactsDef DEVICE_ContactsInfo;
DEVICE_ContactsDef *DEVICE_ContactsPtr;
DEVICE_ContactsPtr = &DEVICE_ContactsInfo;
如上,定义了一个类似于手机通讯录的数据结构
数据结构存放联系人数量和十个联系人信息,
每个联系人的信息结构体里面存放一个标志位和一个11位的手机号。
想问一下,如何通过DEVICE_ContactsPtr指针逐一访问某一INFO_CONTACTS中的每一个字节?
举例:
INFO_CONTACTS.level =1
INFO_CONTACTS.phone_num = 0x31;
INFO_CONTACTS.phone_num = 0x33;
DEVICE_ContactsPtr指针逐一访问某一INFO_CONTACTS中的每一个字节的意思就是
通过改变指针指向让 指针能以增加地址的形式访问下一字节,而不受结构体成员变量的影响??
以下伪代码:
*(DEVICE_ContactsPtr) = 1;
*(DEVICE_ContactsPtr+1) = 0x31;
*(DEVICE_ContactsPtr+2) = 0x33;
请教,如何实现?
1.是不是一级指针实现不了,要用二级指针?
2.在DEVICE_ContactsDef 结构体里面增加一个 INFO_ContactsDef 类型的指针,才能访问INFO_CONTACTS里面的数据吧?
描述可能不太清楚。
谢谢 !
2016-3-9 11:03:09
结贴:
在二楼ilcvm大神的回复下搞定,谢谢
如下是我的测试
#include <stdio.h>
typedefunsigned char u8;
/*
**level = 0; 没配置过,不存在
**level = 1; 普通联系人
**level = 2; VIP重要联系人
*/
typedef struct {
u8 level;
u8 phone_num;
}INFO_ContactsDef;//联系人信息
typedef struct {
u8 contacts_num;//联系人的个数
INFO_ContactsDefINFO_CONTACTS;//定义十位联系人
}DEVICE_ContactsDef;//设备联系人
DEVICE_ContactsDef DEVICE_ContactsInfo;
int main(int argc, char *argv[])
{
DEVICE_ContactsInfo.contacts_num = 10;
DEVICE_ContactsInfo.INFO_CONTACTS.level = 1;
DEVICE_ContactsInfo.INFO_CONTACTS.phone_num = 2;
u8* ptr = (u8*) &DEVICE_ContactsInfo.INFO_CONTACTS;
printf("%x",*ptr);
return 0;
}输出:
1请按任意键继续. . .
顶起 大家都来说两句吧 本帖最后由 ilcvm 于 2016-3-9 10:25 编辑
u8* ptr = (u8*) &DEVICE_ContactsInfo.INFO_CONTACTS;
*ptr = 1;
*(ptr + 1)= 0x31;
*(ptr + 2) = 0x33; ilcvm 发表于 2016-3-9 10:23
u8* ptr = (u8*) &DEVICE_ContactsInfo.INFO_CONTACTS;
*ptr = 1;
*(ptr + 1)= 0x31;
我测试一下,谢谢,大神回复,顶起 磊磊映画 发表于 2016-3-9 10:42
我测试一下,谢谢,大神回复,顶起
我试了一下 可以的。谢谢大神,测试在一楼帖子里 对于指针来说,数据类型都是浮云,只有地址和长度的区别而已。 lzC语言没学好{:titter:}
页:
[1]