【发布时间】:2011-03-08 14:13:07
【问题描述】:
我构建了以下代码部分来帮助自己理解 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。
【问题讨论】: