为什么:
const char example;(uint64*)example的值为140734799798420
和
*(uint64*)example的值为7004431430466964258
附注:不用担心类型转换,我感兴趣的是为什么第二个*会增加值。
谢谢
发布于 2010-03-28 05:51:10
正如其他人所说,您调用了未定义的行为。没有特定的行为是有保证的。
也就是说,您会看到不同的值,因为您打印的是内存中的不同位置--第一个打印来自存储example的内存位置的数据,第二个打印存储在的内存位置的数据作为的值example。
const char example在堆栈上定义一个char变量而不对其进行初始化,因此它的值将是垃圾;可能是上次存储在堆栈上分配它的位置中的任何值。
(uint64 *)example将example的值解释为指向uint64的指针(地址)。这会打印出存储在example中的值,就好像它是一个指针一样。
*(uint64 *)example取消引用该指针。它将example的值解释为指向uint64 (地址)的指针,然后将该地址处的内容打印出来,就好像它是一个uint64一样。
发布于 2010-03-28 05:35:24
您的代码提供了未定义的行为。第二行非法地将字符强制转换为指向uint64的指针(很可能是无效指针)。您的第三行尝试取消引用这个无效的指针。
问它为什么这样做是没有意义的-它可以在不同的机器上做不同的事情,并且行为可能会在下一个版本的编译器中改变。
不要这样做。
https://stackoverflow.com/questions/2531000
复制相似问题