给定十六进制格式的文字内存地址,如何在C中创建一个指向该内存位置的指针?
我的平台(IBM iSeries)上的内存地址是128位。 C类型long long
也是128位。
想象一下,我有一个字符串(char数组)的内存地址:C622D0129B0129F0
我假设正确的C语法直接寻址此内存位置:
const char* const p = (const char* const)0xC622D0129B0129F0ULL
我使用ULL
后缀表示unsigned long long literal。
我的内核/平台/操作系统是否允许我这样做是一个不同的问题。我首先想知道我的语法是否正确。
答案 0 :(得分:12)
您的语法几乎是正确的。您不需要其中一个const
:
const char* const p = (const char*)0xC622D0129B0129F0ULL
const
之前的p
表示初始化后无法更改变量 p
。它没有涉及p
指向的任何内容,因此您不需要在右侧。
答案 1 :(得分:0)
在C中没有像地址文字这样的东西。
唯一保证在整数和指针之间工作的东西是从void*
转换为uintptr_t
(如果存在)然后返回。如果你从某个地方得到你的地址作为整数,那么它应该是uintptr_t
类型。使用像
(void*)(uintptr_t)UINTMAX_C(0xC622D0129B0129F0)
将其转换回来。
您必须包含stdint.h
才能获得uintptr_t
类型和宏UINTMAX_C
。