C语言指针问题

uint16_t e5_temp[2];
void program_ryb(uint8_t *buf)
{
uint8_t i;
uint8_t *ptr;
uint16_t sum_crc=0,

ptr=(uint8_t*)e5_temp;

for(i=0;i<2;i++)
{
ptr[i]=buf[i];
}
for(i=0;i<1;i++)
{
sum_crc+=e5_temp[i];
}
e5_temp[1]=0-sum_crc; //存放CRC校验(取补)
for(i=0;i<RYB_LEN/2;i++)
{
ryb_check[i]=e5_temp[i]; //存放CRC校验(取补)
}
}

keil MDK编译老出现错误

..\USER_CODE\deal_flash.c(74): error: #101: "ptr" has already been declared in the current scope
..\USER_CODE\deal_flash.c(74): error: #144: a value of type "uint8_t *" cannot be used to initialize an entity of type "uint16_t"
..\USER_CODE\deal_flash.c(78): error: #142: expression must have pointer-to-object type

ptr重复申明,

两个类型不一样;

表达式必须有指向对象类型的指针

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-31
最好贴上完整程序 或标注有行号。
提示已经很明显,74行是ptr重复声明了(这一段里面没看到重复声明,所以应该在它前面的代码段里),且不能用uint8_t类型的值去初始化uint16_t类型的实例(这两个类型是定义的类还是直接typedef?)
78行,表达式必须是指向对象类型
第2个回答  2020-04-25

30分钟彻底学会C语言指针

相似回答