【发布时间】:2014-11-11 19:39:04
【问题描述】:
将int 转换为int* 是否有效?如果是,那是什么意思?如果没有,问题是什么?
int a=10;
printf("%d", (int *)a);
只是a 而不是&a。
它在 devc++ 中打印 10。 (int *)a 不是指指向地址 10 的指针,而不是指向存储值 10 的某个地址的指针吗?
啊!我仍然很困惑。我还有一种情况我无法弄清楚。
int b=516;
printf("\n %d",((char *)b));
它打印 516。它不应该打印 4 吗? 请解释一下。
【问题讨论】:
-
你可以。这并不意味着它会有意义。取消引用时,它将跳转到 int 中的位所代表的内存地址。
-
您正在做两件未定义行为的事情 - 您将
int转换为int *,然后使用%d打印int *值。在您的编译器和机器上,这两个错误的效果是相互抵消并打印 10。 -
您正在使用“%d”,这意味着“我保证参数是一个 int”。试试“%p”。 (然后你会遇到一个未定义行为的实例,而不是两个。)或者使用
cout << reinterpret_cast<int *>(a)。 -
@GregHewgill 只有指针和 int 的大小与我假设的相同。
-
@Oncaphillis:是的,在某些编译器/机器组合上,上面的代码不会输出 10。
标签: c++ c pointers casting type-conversion