在使用C语言表述一组有特定格式,顺序的数据时,如报文。报文数据,经常会包含不同功能的数据,为了区分顺序和定位数据在报文中的位置,通常我们会采用定义结构体的方式来表示报文,如接收。如果想发送数据时,我们只需要顺序发送,不关心具体位置,此时定义数组较为方便。为了兼顾这两种情况,可以通过合理的使用数组,指针,和结构之间的转换来解决该问题。
#include <stdio.h> unsigned char a[2] = {0,1}; typedef struct{ unsigned char a[10]; unsigned char b; unsigned char c; }str_TypeDef; str_TypeDef str; unsigned char *p = (unsigned char *)&str; unsigned char d[12]; str_TypeDef *pstr = (str_TypeDef *)&d; void test(void) { unsigned char *p = &a; // *(p+0) = 3; // printf("*(p+0) = %d\r\n", *p); // *(p+1) = 4; // printf("*(p+1) = %d\r\n", *(p+1)); *p = 3; printf("*(p+0) = %d\r\n", *p); *(p+1) = 4; printf("*(p+1) = %d\r\n", *(p+1)); } int main(int argc, char *argv[]) { // test(); // printf("a[0] = %d\r\n", a[0]); // printf("a[1] = %d\r\n", a[1]); int i = 0; for(; i<10; i++) { str.a[i] = i; } str.b = 55; str.c = 66; for(i = 0; i<12; i++) { printf("*p+%d is: %d\r\n", i, *(p+i)); } for(i = 0; i<12; i++) { d[i] = i; } for(i = 0; i<10; i++) { printf("pstr->a[%d] = %d \r\n", i, pstr->a[i]); } printf("pstr->b = %d \r\n", pstr->b); printf("pstr->c = %d \r\n", pstr->c); return 0; }