搜索
bottom↓
回复: 6

请教:结构体嵌套如何使用指针逐一访问每一字节

[复制链接]

出0入0汤圆

发表于 2016-3-9 10:17:42 | 显示全部楼层 |阅读模式
本帖最后由 磊磊映画 于 2016-3-9 11:05 编辑

复制代码
  1. /*
  2. **level = 0; 没配置过,不存在
  3. **level = 1; 普通联系人
  4. **level = 2; VIP  重要联系人
  5. */
  6. typedef struct {
  7. u8 level;
  8. u8 phone_num[12];
  9. } INFO_ContactsDef;//联系人信息

  10. typedef struct {
  11. u8 contacts_num;//联系人的个数
  12. INFO_ContactsDef  INFO_CONTACTS[10];//定义十位联系人
  13. }DEVICE_ContactsDef;//设备联系人


  14. DEVICE_ContactsDef DEVICE_ContactsInfo;
  15. DEVICE_ContactsDef *DEVICE_ContactsPtr;
  16. DEVICE_ContactsPtr = &DEVICE_ContactsInfo;
复制代码


如上,定义了一个类似于手机通讯录的数据结构
数据结构存放联系人数量和十个联系人信息,
每个联系人的信息结构体里面存放一个标志位和一个11位的手机号。

想问一下,如何通过DEVICE_ContactsPtr指针逐一访问某一INFO_CONTACTS[0]中的每一个字节?
举例:
INFO_CONTACTS[0].level =1
INFO_CONTACTS[0].phone_num[0] = 0x31;
INFO_CONTACTS[0].phone_num[1] = 0x33;

DEVICE_ContactsPtr指针逐一访问某一INFO_CONTACTS[0]中的每一个字节的意思就是
通过改变指针指向让 指针能以增加地址的形式访问下一字节,而不受结构体成员变量的影响??
以下伪代码:
*(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大神的回复下搞定,谢谢
如下是我的测试
  1. #include <stdio.h>
  2. typedef  unsigned char u8  ;
  3. /*
  4. **level = 0; 没配置过,不存在
  5. **level = 1; 普通联系人
  6. **level = 2; VIP  重要联系人
  7. */
  8. typedef struct {
  9. u8 level;
  10. u8 phone_num[12];
  11. }INFO_ContactsDef;//联系人信息

  12. typedef struct {
  13. u8 contacts_num;//联系人的个数
  14. INFO_ContactsDef  INFO_CONTACTS[10];//定义十位联系人
  15. }DEVICE_ContactsDef;//设备联系人


  16. DEVICE_ContactsDef DEVICE_ContactsInfo;




  17. int main(int argc, char *argv[])
  18. {
  19.     DEVICE_ContactsInfo.contacts_num = 10;
  20.     DEVICE_ContactsInfo.INFO_CONTACTS[0].level = 1;
  21.     DEVICE_ContactsInfo.INFO_CONTACTS[0].phone_num[0] = 2;
  22.     u8* ptr = (u8*) &DEVICE_ContactsInfo.INFO_CONTACTS[0];
  23.         printf("%x",*ptr);
  24.         return 0;
  25. }
复制代码
输出:
  1. 1请按任意键继续. . .

复制代码




阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2016-3-9 10:20:30 | 显示全部楼层
顶起 大家都来说两句吧  

出0入0汤圆

发表于 2016-3-9 10:23:03 | 显示全部楼层
本帖最后由 ilcvm 于 2016-3-9 10:25 编辑

u8* ptr = (u8*) &DEVICE_ContactsInfo.INFO_CONTACTS[0];
*ptr = 1;
*(ptr + 1)= 0x31;
*(ptr + 2) = 0x33;

出0入0汤圆

 楼主| 发表于 2016-3-9 10:42:50 | 显示全部楼层
ilcvm 发表于 2016-3-9 10:23
u8* ptr = (u8*) &DEVICE_ContactsInfo.INFO_CONTACTS[0];
*ptr = 1;
*(ptr + 1)= 0x31;

我测试一下,谢谢,大神回复,顶起

出0入0汤圆

 楼主| 发表于 2016-3-9 11:06:09 | 显示全部楼层
磊磊映画 发表于 2016-3-9 10:42
我测试一下,谢谢,大神回复,顶起

我试了一下 可以的。谢谢大神,测试在一楼帖子里

出0入0汤圆

发表于 2016-3-9 13:02:08 | 显示全部楼层
对于指针来说,数据类型都是浮云,只有地址和长度的区别而已。

出0入0汤圆

发表于 2016-3-14 21:14:19 | 显示全部楼层
lzC语言没学好
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 05:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表