c - 关于 C 指针的最后一件事 : confused about what this snippet of code will do?

标签 c pointers

我有一个存储在 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/

相关文章:

c++ - 为什么我会收到 "void value not ignored as ought to be"错误?

debugging - 为什么Windbg的dpp命令输出未对齐的地址值

c - __fastcall 与注册语法?

c - 哪个 C99 编译器(Clang 与 GCC)更接近 const 结构字段的标准?

在 C 中将 int 转换为 float(无转换)

c - 问题访问 C 中字符指针数组的内容

复制构造函数中的 C++ vector 数组

c++ - 如何分配指向具有多重继承的类的指针

c - 如果 gets() 可以接受 char 数组,为什么它不接受 char 指针参数?

c++ - 从 C/C++ 向 LDAP 服务器进行身份验证