首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ uint64和*uint64有什么区别?

C++ uint64和*uint64有什么区别?
EN

Stack Overflow用户
提问于 2010-03-28 05:30:40
回答 2查看 1.4K关注 0票数 0

为什么:

代码语言:javascript
复制
const char example;

(uint64*)example的值为140734799798420

*(uint64*)example的值为7004431430466964258

附注:不用担心类型转换,我感兴趣的是为什么第二个*会增加值。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-28 05:51:10

正如其他人所说,您调用了未定义的行为。没有特定的行为是有保证的。

也就是说,您会看到不同的值,因为您打印的是内存中的不同位置--第一个打印来自存储example的内存位置的数据,第二个打印存储在的内存位置的数据作为的值example

代码语言:javascript
复制
const char example

在堆栈上定义一个char变量而不对其进行初始化,因此它的值将是垃圾;可能是上次存储在堆栈上分配它的位置中的任何值。

代码语言:javascript
复制
(uint64 *)example

example的值解释为指向uint64的指针(地址)。这会打印出存储在example中的值,就好像它是一个指针一样。

代码语言:javascript
复制
*(uint64 *)example

取消引用该指针。它将example的值解释为指向uint64 (地址)的指针,然后将该地址处的内容打印出来,就好像它是一个uint64一样。

票数 4
EN

Stack Overflow用户

发布于 2010-03-28 05:35:24

您的代码提供了未定义的行为。第二行非法地将字符强制转换为指向uint64的指针(很可能是无效指针)。您的第三行尝试取消引用这个无效的指针。

问它为什么这样做是没有意义的-它可以在不同的机器上做不同的事情,并且行为可能会在下一个版本的编译器中改变。

不要这样做。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2531000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档