c语言结构体数组问题

#define dCPUWRITE_Rx1 (*(volatile struct tag_ID501 *)&vCPUWRITE_Rx1[0])
unsigned char vCPUWRITE_Rx1[8];
struct tag_ID501
{
unsigned char CPUWRITE_DAT1;
unsigned char CPUWRITE_DAT2;
unsigned char CPUWRITE_DAT3;
unsigned char CPUWRITE_DAT4;
unsigned char CPUWRITE_BYTE;
unsigned char CPUWRITE_ADDR1;
unsigned short CPUWRITE_ADDR2;
};
通过以上定义后,数组是不是这样引用的vCPUWRITE_Rx1[0].CPUWRITE_DAT1;vCPUWRITE_Rx1[0].CPUWRITE_DAT2...........vCPUWRITE_Rx1[0].CPUWRITE_ADDR2。但是数组是char型结构体第7个元素是short型,类型不对。
在项目里最高引用到vCPUWRITE_Rx1[5]高于5报错。语句:dat = &vCPUWRITE_Rx1[0];//dat是内部指针变量char型。
求详解。

理解有误
你的数组vCPUWRITE_Rx1它的类型是char []也就是说 它是一个8个字符的char型数组 而不是结构体数组

结构体类型为struct tag_ID501

这里用了一个很常用的方式 即通过宏定义dCPUWRITE_Rx1 把char数组vCPUWRITE_Rx1映射成了struct tag_ID501 (二者都是占8个字节的空间 所以可以这样做 不然会出错)
所以调用的时候可以
dCPUWRITE_Rx1.CPUWRITE_DAT1 = ...

dCPUWRITE_Rx1.CPUWRITE_DAT4...

其他的元素类似
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-09
#include<stdio.h>struct Letter{char ch;int st;int nd;}letter[26];int main(){char a;char *p=&a;int i,j,Q,k=0;for(i=2;i<=9;i++){ if(i==7||i==9) Q=4; else Q=3; //for(j=1;j<Q;j++)//从1到Q,你少了一次 for(j=1;j<=Q;j++,k++) // letter[++k]={++*p,st,nd}//不能这样的赋值。 { letter[k].ch='a'+k; letter[k].st=i; letter[k].nd=j; } }for(i=0;i<26;i++)//printf("%c--%d %d",letter.ch,letter.st,letter.nd);//你还是重新看一次书上的数组这一章吧。 printf("%c--%d %d\n",letter[i].ch,letter[i].st,letter[i].nd);return 0;}
相似回答