2010-09-29 293 views
3

我所遇到一条线,下面字符指针初始化

  char *ch=(char*)3000 

我想知道这行的意义给予.....

+0

然而,3000可能是不好的,为了成功编译,该行在结尾处肯定需要一个分号:) – Arun 2010-09-30 00:47:20

回答

0

这不是很明显吗?

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

+2

...这是你可能不想做的事情。 – gspr 2010-09-29 13:47:28

9

它看起来像指针ch被分配了一个绝对内存地址3000.通常是一个非常糟糕的主意,除非你正在使用嵌入式系统而没有分页,并且你知道正好是什么是内存位置3000 。

+2

作为对这一答案的补充的一种支持:将您的系统内存视为一系列大量的篮子 - 在现代计算机上数十亿个篮子。如果不知道什么更多关于什么在篮子里,您说“ch应该意味篮子数字三千”。你可能会猜到,除非你有一个非常具体的计划,否则这不是一个好主意。 – gspr 2010-09-29 13:51:19

+0

Win32 DDK中至少有一种情况需要根据调用的函数的其他参数将整数转换为指针。每当我不得不打电话时,它都让我尖叫起来。 – mkb 2010-09-29 13:52:11

+0

任何内核空间代码都足以经常看到这种事情。但是,十进制3000确实看起来可疑。 – DevSolar 2010-09-29 14:46:16

0

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

如果您在代码中看到该代码,可能会错误地使用该代码而不是(void *),例如在映射中存在键值对的情况下,可能会将结果转换为整数。

1

也许看到代码的其余部分是有关...

该指针可能是相对于它驻留(英特尔处理器)。在这种情况下,3000可能只是该程序段中定义的那个段的索引,在那里我们没有这些行。

这取决于系统架构,环境,操作系统,编译器,其他代码(和程序员......)。