开发的时候遇到这样一个场景:
typedef一个30字节长度的结构体类型,
然后建立一个该结构体的数组
static ORDER_OBJECT_TypeDef order_object[ORDER_DEVICECOUNT] ;
把该数组的首地址作为入参,给一个functionA
void functionA(ORDER_OBJECT_TypeDef *p_order_object_firstelement )
{
uint32_t temp1 = sizeof(ORDER_OBJECT_TypeDef) ;
printf1("ORDER_OBJECT_TypeDef is %d",temp1) ; //打印出来长度为30
SUM32WITH4BYTES_TypeDef temp ;
temp.sum_32 = p_order_object_firstelement ;
PrintfHexDump("p_order_object_firstelement is ", &(temp.arr_8[0]), 4) ; //打印出来为0X00207c3c
temp.sum_32 = p_order_object_firstelement + 1 ;
PrintfHexDump("p_target_order_object is ", &(temp.arr_8[0]), 4) ; //打印出来为0X00207c5a
temp.sum_32 = (uint8_t *)p_order_object_firstelement ;
temp.sum_32 = temp.sum_32 + 1 ;
PrintfHexDump("p_target_order_object + 1 is ", &(temp.arr_8[0]), 4) ; //打印出来为0X00207c3d
}
由此可见,指针是带类型的,如果是一个数组(arr[n])的首地址加1,那么地址就是arr[1]的地址。
如果转换把数组(arr[n])的首地址先转换成uint8_t *的格式,再加1,那么地址就是(arr[0]的地址 +1)