6

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

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

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

我假设正确的 C 语法可以直接寻址这个内存位置:

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

我使用ULL后缀表示 unsigned long long 文字。

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

4

2 回答 2

12

您的语法几乎是正确的。您不需要其中之一const

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

const紧接在前面的p表示变量 p在初始化后不能更改。它不涉及指向什么的任何内容p,因此您不需要在右侧使用它。

于 2010-08-29T07:53:06.447 回答
1

C 中没有像地址文字这样的东西。

唯一能保证在整数和指针之间工作的东西是从void*to uintptr_t(如果存在的话)然后再转换回来。如果你从某个地方得到你的地址作为一个整数,这应该是 type uintptr_t。使用类似的东西

(void*)(uintptr_t)UINTMAX_C(0xC622D0129B0129F0)

将其转换回来。

您必须包含stdint.h才能获取类型uintptr_t和宏UINTMAX_C

于 2010-08-29T09:51:33.940 回答