c - 将 uint32* 添加到 uint32

标签 c

我无法理解指针算法。任何帮助将不胜感激。

uint32* valA = 0x80000000; 
uint32 valB = 0x7a0

valA += valB;

valA 的值为 0x80001e80。这是 valB 的四倍。

我的疑问: 1、为什么valA的值没有变成0x800007a0。 2. 如何让 valA 只增加 0x7a0 而不是 valB 值的四倍。

最佳答案

C 中的指针算法按类型的大小缩放,这使得这两个等价:

valA = valA + valB;
valA = &valA[valB];

如果你想强制它把它当作一个字节偏移量,你需要先转换为 char *:

valA = (uint32 *)((char *)valA + valB);

关于c - 将 uint32* 添加到 uint32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22518671/

相关文章:

从 strtok 复制字符串

c - 错误的合并排序结果

c - OpenCL:如何在不使用多线程的情况下在不同设备上分配计算

c - 打印文件中前 10 个重复出现的单词

c - 接收到的网络数据包中的内存对齐问题

c - Imagesc 等同于 C 语言?

c - 我应该怎么做才能删除最后一个词后的逗号?

c++ - 复合 if 语句使用 ? : operator in C

c - LLVM C API。如何确定 LLVMValueRef 是整数类型还是指针类型?

c - 如何在不使用内置malloc函数的情况下实现enque函数?