Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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 - Fatal编程技术网

C 字符指针初始化

C 字符指针初始化,c,pointers,C,Pointers,我遇到了下面给出的一条线 char *ch=(char*)3000 我想知道这句话的意思……这不是很明显吗 数值“3000”被转换为字符指针,即ch被初始化为内存地址3000(十进制)。看起来指针ch被分配了一个绝对内存地址3000。通常情况下,这是一个非常糟糕的主意,除非您在没有分页的嵌入式系统上工作,并且您确切地知道内存位置3000处有什么。AFAIK,3000不是特殊的地址/值,在大多数情况下,访问它会导致分段错误或垃圾值 如果您在代码中看到这一点,可能是它被错误地

我遇到了下面给出的一条线

           char *ch=(char*)3000
我想知道这句话的意思……这不是很明显吗


数值“3000”被转换为字符指针,即
ch
被初始化为内存地址3000(十进制)。

看起来指针ch被分配了一个绝对内存地址3000。通常情况下,这是一个非常糟糕的主意,除非您在没有分页的嵌入式系统上工作,并且您确切地知道内存位置3000处有什么。

AFAIK,3000不是特殊的地址/值,在大多数情况下,访问它会导致分段错误或垃圾值


如果您在代码中看到这一点,可能是它被错误地使用,而不是(void*),比如在有键值对的映射中,在这种情况下,结果可能被转换为整数

也许看到代码的其余部分会有意义……

该指针可能相对于它所在的段(在英特尔处理器上)。在这种情况下,
3000
可以简单地作为该段的索引,该段在程序前面定义,我们没有行


这取决于系统体系结构、环境、操作系统、编译器、其余代码(以及程序员…)。

。。。这可能是你不想做的事情。一个补充这个答案的反常现象:把你的系统内存想象成一个巨大的篮子序列——现代计算机上有几十亿个篮子。在不知道篮子里有什么的情况下,你说的是“ch应该意味着篮子里有三千个”。除非您有一个非常具体的计划,否则您可能会猜到这不是一个好主意。在Win32 DDK中,至少有一种情况要求您根据正在调用的函数的其他参数将整数强制转换为指针。每次我不得不调用它时,它都会让我尖叫。任何内核空间代码都足以经常看到这种事情。然而,十进制3000看起来确实可疑。为什么地址被解释为“绝对”?那不是虚拟地址吗?虚拟地址0x3000如何映射到物理地址超出了程序的范围,不是吗?ArunSaha,这就是为什么我规定海报可能在没有分页的嵌入式系统上工作。如果是这样,那么内存地址是绝对的。你是对的,如果引擎盖下有某种分页(包括虚拟内存),那么3000可能意味着任何东西。不管3000有多糟糕,为了成功编译,该行最后肯定需要一个分号:)