gpt4 book ai didi

c - 在uint8_t指针中添加int到底有什么作用?

转载 作者:行者123 更新时间:2023-12-03 11:43:16 24 4
gpt4 key购买 nike

我不太用C编写代码,但是我目前正在(尝试)将C项目移植到Rust,但我不知道这样做的含义:

void example(const uint8_t *m, unsigned int r)
{
m += r;
}

经过一番谷歌搜索后,我 认为m = m[r]相同。但是,如果是这样, mm[r]是两种不同的数据类型(对吗??)。尝试在Rust中复制此代码:
fn example(m: &mut [u8], r: u32) {
m = m[r];
}

这给出了错误 mismatched types: expected `&mut [u8]`, found `u8,这是有道理的。我或者把Rust部分弄错了,或者我没有完全理解C部分的作用。有人可以解释我哪里出问题了吗?

最佳答案

给定指向数组中某个元素的m指针(例如x)和整数rm += rm调整为指向r之后是x元素的元素。

例如,如果m指向a[3]r为5,则m += r会将m更改为指向a[8]

muint8_t *的情况下,它必须指向为字节的元素,并且通过m元素使r前进将使指针前进r字节。在m指向较大类型的情况下(例如当mint *时),通过m元素将r前进会使指针前进r*s字节,其中s是每个元素中的字节数。

在许多C实现中,内存中的字节仅从0开始连续编号(尽管并非所有字节都可以映射到虚拟地址空间中),并且用指针所指向的字节数来表示一个指针。在这种情况下,要使指针增加n个字节,C实现只需在其表示中添加n。在具有更复杂的内存模型的C实现中,C实现执行生成指向正确位置的指针所需的任何操作。

关于c - 在uint8_t指针中添加int到底有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61342427/

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