我有一个存储在 b+4 处的指针值,我想将“a”加载到其中。所以本质上我认为 b+4 是一个指向 unsigned int 的指针(a 指向的地址)。但是,我想知道这段代码是否实际上会存储整个“a”(因为“a”是 4 个字节),或者左侧值是否仅存储 1 个字节:
void *a = //something;
*((unsigned **)((char*)b+4)) = a;
我很困惑第二行是将“a”存储为字符还是无符号整数...
*编辑:那么,如果我这样做,会有什么不同吗:
*((char *)b + 4) = a;
最佳答案
*((unsigned **)((char*)b+4)) = a;
解析为指针。
指针是一种类型,它仅指向(存储)该类型(其声明的类型)的地址。另请注意,系统上的所有指针基本上具有相同的大小。
所以在这种情况下,
b+4
处的指针只是指向/存储 a
存储的地址。
您将有两个指针指向同一地址。
|----------|
| b+4 |
| | 1000
| 2000 |
|----------|
|
|
|
|
-------------------->|----------|
| num |
-------------------->| | 2000
| | 2 | This is what a points to
| |----------|
|
|
|----------|
| a |
| | 3000
| 2000 |
|----------|
*((char *)b + 4) = a;
无法解析为指针类型,您正在尝试将指针分配给非指针类型,因此它应该发出警告。
关于c - 关于 C 指针的最后一件事 : confused about what this snippet of code will do?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7803116/