gpt4 book ai didi

c - 在指针递增时没有得到预期的结果

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:49 24 4
gpt4 key购买 nike

指针增量没有给出正确的值,它指向不确定的地址。

想知道为什么*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));
}

}

我正在打印 HEX 的十进制值,但至少我期待正确的值,但我得到不确定的值。

我期待这样的输出。

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

最佳答案

你需要一个辅助指针,

uint8_t *ptr;

p = buf;
ptr = p;

*p++ = 0x14;

等等,因为++会修改指针的值。

然后,

for (i = 0; i < ARRAY_SIZE(buf); i++) {
printf("%d ", ptr[i]);
}

++后自增或前自增运算符,使指针p在表达式求值后指向p + 1 ,因此当您尝试打印时,您的 p NOT 指向 buf


编辑:当然你也可以这样做,

for (i = 0; i < ARRAY_SIZE(buf); i++) {
printf("%d ", buf[i]);
}

但我认为原始答案解释了重要的原因。


额外:此外,我 99.9% 确定这是错误的

uint8_t buf[20] = {"0"};

你的意思是,

uint8_t buf[20] = {0};

您的编译器可能会向您显示此错误初始化的警告,因为 "0" 具有指针类型,即使它可以转换为整数类型,它也肯定不适合uint8_t 所以那里有溢出问题。

关于c - 在指针递增时没有得到预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com