内存地址文字

时间:2010-08-29 07:51:23

标签: c pointers memory literals memory-address

给定十六进制格式的文字内存地址,如何在C中创建一个指向该内存位置的指针?

我的平台(IBM iSeries)上的内存地址是128位。 C类型long long也是128位。

想象一下,我有一个字符串(char数组)的内存地址:C622D0129B0129F0

我假设正确的C语法直接寻址此内存位置:

const char* const p = (const char* const)0xC622D0129B0129F0ULL

我使用ULL后缀表示unsigned long long literal。

我的内核/平台/操作系统是否允许我这样做是一个不同的问题。我首先想知道我的语法是否正确。

2 个答案:

答案 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