数组作为实参,指针作为形参,传递的就只是地址。
现有这么一段程序
void test_write(FLASH_SAVE_ADDR,(u16*)datatemp,SIZE);
int main(void)
{
uint16_t data[6] = {0x0101,0x0202,0x0303,0x0404,0x0505,0x0606};
uint16_t buffer[6]={0,0,0,0,0,0};
test_write((u16*)data,(u16*)buffer,2);
}
void test_write(u16 *read,u16 *write,u16 Num)
{
uint16_t i;
for(i=0;i<Num;i++)
{
write[i]=read[i];
}
}
这样传递下来,buffer数组的值为{0x0101,0x0202,0,0,0,0}。函数将地址data后的两个16位的数赋值给地址buffer后的两个16位数。
再看另一段:
void test_write(FLASH_SAVE_ADDR,(u16*)datatemp,SIZE);
int main(void)
{
uint16_t data[6] = {1,2,3,4,5,6};
uint8_t buffer[6]={0,0,0,0,0,0};
test_write((u16*)data,(u16*)buffer,2);
}
void test_write(u16 *read,u16 *write,u16 Num)
{
uint16_t i;
for(i=0;i<Num;i++)
{
write[i]=read[i];
}
}
这样的buffer数组的值为{0x01,0x01,0x02,0x02,0,0}。函数将地址data后的两个16位的数赋值给地址buffer后的两个16位数。由于buffer作为实参是8位数组,因此数组内储存的实际值为{0x01,0x01,0x02,0x02,0,0}。
可以看出数组指针看出仅仅是传递了地址,然后在函数内部按照函数自己的规则进行运算。