我们可以使用c编程语言中的指针类型转换整数值吗?

时间:2018-04-30 20:43:53

标签: c pointers

在很多c代码片段中,我看到(void *)0 ,使用指针转换整数是什么意思?

1 个答案:

答案 0 :(得分:2)

通常,将整数强制转换为指针“意味着”创建指向内存中精确数字地址的指针值。但是我在这里引用了“手段”这个词,因为实际意义更复杂。

基本上有三个子类。

  1. 如果整数是常数0(特别是如果转换为指针类型为void *),则这是空指针常量。根据定义,它是一个语法结构,可以获得空指针值。根据定义,空指针无处指向(它“与指向任何实际对象的指针不相等”)。
  2. 在旧式C编程中,直到今天在嵌入式C编程中,如果整数非零,则它是您尝试访问的实际内存地址。
  3. 在现代的,可移植的,高级的C编程中,特别是在Stack Overflow中,意思是最好的实现定义或最坏的定义,这意味着你不应该这样做,你甚至可能不应该问关于它,因为没有人可以肯定地说它意味着什么。
  4. 在回答你对Jonathan Leffler的评论时,NULL实际上并不是一个关键字,而是一个预处理器宏,它扩展为(void *)0或者可能是0。 (如果没有强制转换,普通0可以正常工作,因为空指针常量是一个引人入胜但经常被误解的副问题,我不打算在这里讨论。请参阅{{ 3}} section 5如果好奇的话。)