Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何正确地强制转换以将指针与显式地址范围进行比较?_C_Pointers_Casting - Fatal编程技术网

C 如何正确地强制转换以将指针与显式地址范围进行比较?

C 如何正确地强制转换以将指针与显式地址范围进行比较?,c,pointers,casting,C,Pointers,Casting,我做了一些malloc,然后我想检查malloc的结果是否在我的RAM中,如下所示: char (*message)[]; message = malloc(data_index); if(message != NULL && message >= 0x20000000 && message < 0x20030000){ //do something } char *message; message = malloc(data_index); i

我做了一些malloc,然后我想检查malloc的结果是否在我的RAM中,如下所示:

char (*message)[];
message = malloc(data_index);
if(message != NULL && message >= 0x20000000 && message < 0x20030000){
  //do something
}
char *message;
message = malloc(data_index);
if(message != NULL && message >= (char*)0x20000000 && message < (char*)0x20030000){
  // will do something
  // if message contains an address between 0x20000000 and 0x20030000
}
我还尝试将其转换为双指针,我认为这是正确的类型,但警告仍然存在

if(message >= (char**)0x20000000) {

如何在没有警告的情况下获得woking if语句?

您可能需要这样的语句:

char (*message)[];
message = malloc(data_index);
if(message != NULL && message >= 0x20000000 && message < 0x20030000){
  //do something
}
char *message;
message = malloc(data_index);
if(message != NULL && message >= (char*)0x20000000 && message < (char*)0x20030000){
  // will do something
  // if message contains an address between 0x20000000 and 0x20030000
}
char*消息;
消息=malloc(数据索引);
如果(消息!=NULL&&message>=(字符*)0x20000000&&message<(字符*)0x20030000){
//我会做点什么
//如果消息包含介于0x20000000和0x20030000之间的地址
}
请注意,这只适用于特定的硬件(您没有提到您的目标系统)


在现代桌面系统(Mac/Windows/Linux)上,这是没有意义的,因为所有内存地址都是虚拟的。

如果您在一个具有虚拟内存的系统上(基本上是过去几十年中的每一个类似PC的系统),malloc接收到的地址将不会反映内存的实际物理位置。此外,将
message
声明为指向未知大小数组的指针本身没有多大意义,通常也没有多大意义(它甚至可以构建吗?)。请注意,指向数组的指针与指向指针的指针的类型不同。您实际上想要实现什么?这看起来像一个内存地址,当然不能保存在
char
类型中,也可能不适合
int
类型。“我做了一些malloc,然后我想检查malloc的结果是否在我的RAM中:
malloc
的返回值在你的RAM中,这是肯定的,对任何实现都是有效的。”。