数组,指针,结构体的使用

在使用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;
}



猜你喜欢

转载自blog.csdn.net/graduation201209/article/details/77371147