Can we assign a value to a given memory location?

后端 未结 7 2158
自闭症患者
自闭症患者 2021-02-05 23:07

I want to assign some value (say 2345) to a memory location(say 0X12AED567). Can this be done?

In other words, how can I implement the following function?



        
7条回答
  •  一个人的身影
    2021-02-05 23:41

    C99 standard draft

    This is likely not possible without implementation defined behavior.

    About casts like:

    *(uint32_t *)0x12AED567 = 2345;
    

    the C99 N1256 standard draft "6.3.2.3 Pointers" says:

    5 An integer may be converted to any pointer type. Except as previously specified, the result is implementation-defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap representation. 56)

    GCC implementation

    GCC documents its int to pointer implementation at: https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Arrays-and-pointers-implementation.html#Arrays-and-pointers-implementation

    A cast from integer to pointer discards most-significant bits if the pointer representation is smaller than the integer type, extends according to the signedness of the integer type if the pointer representation is larger than the integer type, otherwise the bits are unchanged.

    so the cast will work as expected for this implementation. I expect other compilers to do similar things.

提交回复
热议问题