目录
- 嵌入式C语言编程中经验教训总结(八)变量、指针和指针数组的内存管理
- 变量、指针和指针数组的内存占用
- 指针、指针数组的空间验证
- 指针数组的元素数据访问方法
嵌入式C语言编程中经验教训总结(八)变量、指针和指针数组的内存管理
变量、指针和指针数组的内存占用
在标准C的整型变量是32位,也就是4字节。但是,在在某些编译平台上,整型的长度则取决于硬件结构。在嵌入式平台上,往往还有short 等类型,一般来说,对于变量区分为有符号型与无符号型。有符号型,由于最高位为符号位:
short 内存占两字节,范围为-2^15~(2^15-1)
int 内存占四字节,范围为-2^31~(2^31-1)
而对于无符号型:最高位不表示符号位
unsigned short 占两字节,范围为0~2^16-1
unsigned int 占四个字节,范围为0~2^32-1
比较特殊的是指针
unsigned char *pChar;
unsigned short *pShort;
unsigned int * pInt;
无论指向的数据是什么类型,由于指针存储的是变量的地址,在32bit系统中,
*pChar、*pShort 和 *pInt 均占用32字节。
而指针数组的每个元素均为指针,所以,指针数组所占用内存的大小:
指针数组元素内存大小 * 元素个数
指针、指针数组的空间验证
我们首先声明几个数组:
unsigned char Cmd1_Data[10]={0x68,0x13,0x00,0xDF,0x16};
unsigned char Cmd2_Data[10]={0x68,0x14,0x00,0xDF,0x16};
unsigned char Cmd3_Data[10]={0x68,0x15,0x00,0xDF,0x16};
unsigned char Cmd4_Data[10]={0x68,0x16,0x00,0xDF,0x16};
在声明一个指针数组:
unsigned char *Cmd[] ={Cmd1_Data,Cmd2_Data,Cmd3_Data};
我们来验证下存储空间的大小:
int i,len;
unsigned char *pcmd;
int *plen = &len;
pcmd=Cmd[0];
len = *pcmd;
printf(" DL645Cmd size = %02d, pcmd size = %02d,plen size = %02d i size = %02d \n,",sizeof(Cmd),sizeof(pcmd),sizeof(plen),sizeof(i));
运行后可以看到:
可以看到,Cmd的大小为16,为4个指针元素的大小之和。怎么通过指针数组访问各个数组的元素昵?
指针数组的元素数据访问方法
我们以访问第二个数组为例,功能实现如下:
num = 1 ;//数组下标从0开始,所以,第二个数组下标为1
pcmd=Cmd[num ];
for(i=0;i<len;i++)
{
buff[i] = *(pcmd+i);
printf("%02X,",buff[i]);
}
printf("\n");
如果要访问其他数组,可以动态更改num的值,或做成一个循环读取全部数组元素的值即可。