搜索
bottom↓
回复: 4

如何正确的引用一个结构体数组?

[复制链接]

出0入0汤圆

发表于 2012-7-26 10:30:49 | 显示全部楼层 |阅读模式
在实际应用中遇到一个问题:
定义一个结构体stA:
typedef struct _a_
{
uint8 meb1;
uint8 meb2;
}stA;

定义m个结构体数组
const stA Tab1[i] =
{
{}.
{},
{},
};
const stA Tab2[j] =
{
{}.
{},
{},
};
.
.
.
const stA Tabm[k] =
{
{}.
{},
{},
};
问题:
选择一种数组定义方式 NameA[m]
要求将结构体数组存放到此数组中,在应用程序中通过调用NameA来访问结构数组中的任意一组数据
例如我要使用Tab2[3].meb1数据。请给出NameA[m]的定义方式和调用方式。

我是这样使用的,但是结果不对:
定义:
const stA* const NameA[]=//-----is there Error?
{
&Tab1,
&Tab2,
.
.
.
Tabm[],
}
调用:

const stA* ptTest = NULL;

ptTest = *(&NameA[1] + sizeof(NameA[1])/sizeof(stA*) * 3)//获取Tab2[3]数据----实际这里已经出错了
ptTest->meb1 ++;

请问各位 错误出在哪?
应该如何定义NameA[]?如何获取我期望的Tab2[3].meb1数据

Thanks!!!

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-7-26 10:53:17 | 显示全部楼层
  1. #include <stdio.h>

  2. #define uint8 unsigned char

  3. typedef struct _a_
  4. {
  5.         uint8 meb1;
  6.          uint8 meb2;
  7. }stA;

  8. stA Tab1[] =
  9. {
  10. 1,
  11. 2
  12. };

  13. stA Tab2[] =
  14. {
  15. 3,
  16. 4,
  17. };

  18. stA Tabm[] =
  19. {
  20. 5,
  21. 6,
  22. };

  23. stA* const NameA[]=
  24. {
  25. &Tab1[0],
  26. &Tab2[0],
  27. &Tabm[0],
  28. };

  29. int main(void)
  30. {
  31.         stA *p;
  32.         int i;

  33.         for (i=0; i<3; i++) {
  34.                 p = NameA[i];
  35.                 printf("%d, %d\n", p->meb1, p->meb2);
  36.         }

  37.     return 0;

  38. }
复制代码
我在vc中写了点代码,楼主看看

出0入0汤圆

发表于 2012-7-26 10:53:58 | 显示全部楼层
1. 定义:
const stA* const NameA[]=//-----is there Error?
{
&Tab1,
&Tab2,
.
.
.
Tabm[],
}
赋值时候,可加强制类型装换,避免编译器报错,如
const stA* const NameA[]=//-----is there Error?
{
(stA*)&Tab1,
(stA*)&Tab2,
.
.
.
(stA*)Tabm,
}

2. 使用:
可以直接按照数组的方式使用,如:
NameA[0][0].mem1 表示访问 数组Tab1的0下标下的结构体的mem1成员.

出0入0汤圆

 楼主| 发表于 2012-7-26 13:28:16 | 显示全部楼层
to 2楼,刚开始就是这么使用的,莫非编译器的问题?
to 3楼,本身NameA[0][0]的引用就是错误的。

出0入0汤圆

发表于 2012-7-26 17:17:15 | 显示全部楼层
没经测试;我想访问你这样一个数组中的成员大概应该是这个样子!

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

本版积分规则

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

GMT+8, 2024-8-26 16:20

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

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