【发布时间】:2017-08-29 12:56:28
【问题描述】:
指针增量没有给出正确的值,它指向不确定的地址。
想知道为什么*p++= <value> 没有指向我想要的值,而是指向别的东西
我的代码:
void run_exe() {
int i;
uint8_t buf[20] = {"0"};
uint8_t *p = NULL;
uint8_t tx_buf[4] = {1,1,1,1};
p = buf;
*p++ = 0x14;
*p++ = 0x20;
*p++ = 0x30;
*p++ = 0x40;
*p++ = 0x50;
*p++ = 0x60;
memcpy( p+6, tx_buf, sizeof(tx_buf));
// ARRAY_SIZE: is the macro just my array length.
for (i = 0; i < ARRAY_SIZE(buf); i++) {
printf("%d ", *(p+i));
}
}
我正在打印十六进制的十进制值,但至少我期待正确的值,但我得到不确定的值。
我期待这样的输出。
14 20 30 40 50 60 1 1 1 1 0 0 0 0 0 0 0 0 0
输出:
0 0 0 0 0 0 1 1 1 1 0 0 0 0 255 127 0 0 0
【问题讨论】:
-
p++6 次后,p指向哪里? -
@SouravGhosh,我不明白你的评论。你的意思是说,我需要为 *p 分配内存?
-
事实上,您显示的代码中根本不需要
p。您可以将buf与普通数组索引一起使用( 和 指针算术,如果这是您想要的)。 -
@DanglingPointer 请忽略,我看错了代码。
-
@DanglingPointer 在您增加
p之后不会。然后它指向buf[6],这是你的问题。当你这样做时*p++ = 0x14;和*p = 0x14; p = p + 1;一样。