c - int *p = (int*) 60 是什么意思?

标签 c pointers

#include <stdio.h>

int main()
{
    int *p = (int*) 60;    --- Line 1
    int *q = (int*) 40;    --- Line 2
    printf("%d", p-q);    //Output is 5
    return 0;
}

有人可以向我解释一下这个程序的输出吗?

最佳答案

这意味着将整数值分配给指针的(实现定义的)操作发生了。这通常意味着 p 指向 60 处的内存地址,而 q 指向 40 处的地址。这些内存地址可以在虚拟内存、硬件内存中,许多实现都有不同的转换例程。

因为这是实现定义的,所以如您的实现所述,任何事情都可能发生。

但这不是一文不值吗?

肯定不是,它在嵌入式硬件编程中很多用于访问某些功能或调用内置函数。


很可能在您的系统上 int 是 4 个字节宽,所以 p - q 等于 (60 - 40)/4 == 5 .

关于c - int *p = (int*) 60 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583297/

相关文章:

c++ - 具有 root 权限的库 (.so)

c - 在其挂钟运行时间的一部分上测量守护进程 CPU 利用率

c++ - 何时在 C++ 中使用 extern "C"?

java - JNA 的 Pointer.getPointerArray(long base) 和 Pointer.getStringArray(long base) 中的 'base' 是什么意思?

c - c中的奇怪行为

c - 64 位到 10 位的哈希函数

c - 为什么这个字符串反转 C 代码会导致段错误?

c++ - 无法将 cocos2d::Animation * 存储在结构的 std::vector 中?

c - 定义一个包含数据数组和一些指向相同数据数组区域的指针的结构

c - 将文件中的数据存储到结构数组