gpt4 book ai didi

c - 取消引用和类型转换

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:46 24 4
gpt4 key购买 nike

我构建了以下代码部分来帮助自己理解 C 中的指针取消引用和类型转换。

char a = 'a';
char * b = &a;
int i = (int) *b;

对于上面的内容,我知道在第 3 行,我取消了对 b 的引用并得到了 'a' 并且 (int) 会将 'a' 的值类型转换为存储在 i 中的对应值 97。但是对于这段代码:

char a = 'a';
char * b = &a;
int i = *(int *)b;

这导致 i 成为某个任意大数,如 792351。我假设这是一个内存地址,但我的问题是为什么?当我将 b 类型转换为整数指针时,这实际上是否会导致 b 指向内存中的不同区域?这是怎么回事?

编辑:如果上述方法不起作用,那么为什么这样的方法会起作用:

char a = 'a';
void * b = &a;
char c = *(char *)b;

这正确地将 'a' 分配给 c。

最佳答案

你的 int 比你的 char 大 - 你得到 'a' 值 + 内存中跟随它的一些随机数据。

例如,假设内存中的布局是这样的:

'a'
0xFF
0xFF
0xFF

你的 char *int * 都指向 'a'。当您取消引用 char * 时,您只会得到第一个字节,即 'a'。当您取消引用 int *(假设您的 int 是 32 位)时,您会得到 'a'未初始化数据 的 3 个字节

编辑:回应更新的问题:

char c = *(char *)b; 中,b 仍然指向 'a' 值。您将它转换为 char *,然后取消引用它,得到 char *

指向的 char

关于c - 取消引用和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5233619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com