当指针类型转换为基本数据类型时会发生什么。为什么我们会获得一些值(value)?
例如:
int h=4;
int * ph=&h;
printf("%p",ph);
printf("%d",ph);
两个打印语句打印不同的值...
最佳答案
printf("%p",ph);
对运行时说“看那边,内存是一个指针,请加载它并以十六进制打印出来”。请注意,这不是对编译器说的,编译器不知道 printf 在做什么(实际上大多数现代编译器都会偷偷看一下 printf 语句,您可能会收到警告)。
printf("%d",ph);
说 - “看到那 block 内存,它是一个整数,请加载它并将其打印为人类可读的基数 10 数字”
鉴于 ph 是一个指向 int 的指针,第一个执行正确的操作,它打印出指针的值。
第二个的行为取决于系统上 int 和指针的大小和表示形式。该值“实际上”是一个指针,但您告诉运行时它是一个 int。在许多系统中,指针和整数都是 32 位。在这种情况下,加载将加载 32 位,并且打印会将这些位解释为 int 并打印出指针的基数 10 值。在其他系统上,指针可能是 64 位,而 int 仍然是 32 位。由于您没有说出您得到的值,所以很难知道发生了什么,但如果我不得不猜测,我会说您得到了相同的值,一个是十六进制,另一个是十进制
请注意,第二个是所谓的“未定义行为”,您对系统撒谎:可能会发生糟糕的、令人困惑的、无法解释的事情
关于c - 指向一些基本数据类型的指针的类型转换(内部发生的情况),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871533/