【发布时间】:2013-12-28 14:43:43
【问题描述】:
我需要用已知地址初始化一个指针变量。请看下面的代码,ptr是最终目的地,ptr_address的值包含地址值,所以我需要做一些类似ptr = value的事情。
int *ptr;
int address;
address = 0x10000005;
ptr = address;
问题是编译器给出了以下警告信息:
warning: assignment makes pointer from integer without a cast [enabled by default]
我的代码是错误的还是有其他方法可以在没有收到此编译器警告的情况下执行此操作?
【问题讨论】:
-
0x10000005似乎不太可能是int的地址... -
[OT]:您可以使用
std::intptr_t代替int来存储您的地址。 -
请问您在哪种情况下静态(在编译时)知道运行时某些东西的地址?
-
在初始化过程中,我得到了一组地址值,它们作为简单变量(不是指针)的值传递给我,而在其他时刻,我必须用这些值初始化一个指针。
-
请注意 C 和 C++ 是不同的语言,请只使用一个或其他标签。在 C 语言中,您可以使用
ptr = (int*) address;来获取有效代码;甚至ptr = (void*) address;也可能会起作用。通常,您希望整数指针在四字节边界上对齐 - 这不会。你确定你知道你在做什么吗?指针是危险的东西。当您不知道目标时,切勿瞄准加载的指针。