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

标签 c arrays pointers

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

想知道为什么*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/

相关文章:

c++ - C++代码中的错误指针错误

c - MPI - 发送和接收矩阵行

php - 解析错误: syntax error, unexpected T_VARIABLE in Xro_config.php on line 21

c - 仅使用 4 个 'if' 语句 - 查找 4 个整数中的最大和最小

arrays - 如果实例对象值和数组值相同,则删除数组索引

PHP数组循环+MySQL数据

c++ - 从 void* 到 DWORD 的指针截断

c - 数组到指针与二维数组

c - 简单 C - 提取变量的即时值并存储它

c - 使用 rand() 函数的程序