#include <stdio.h>
int main() {
char c = 'A';
int *int_ptr;
double *double_ptr;
*int_ptr = *(int *)&c;
*double_ptr = *(double *)&c;
printf("Original char = %c \n", c);
printf("Integer pointer = %d \n", *int_ptr);
printf("Double pointer = %f\n", *double_ptr);
return 0;
}
的追问是 - 为什么我不能指定使用此代码的double_ptr
,因为它会导致分段错误,但是对于整数正常工作?演员指针类型
据我所知char是1个字节长,int是4个字节长,所以double是8个字节长。
通过使用表达*(double *)&c
我想到以下几点:
- & - 获取C的内存地址。
- (double *) - 假设这是一个加倍的指针。
- *() - 获取实际值并将其分配给double var。
1)你知道你在做什么是“错误的”。 2)如果你很好奇你为什么会出现分割错误,为什么不用-S(gcc)或/ Fa(MSVC)编译并查看程序集输出? – paulsm4
首先你没有任何指针后面的内存,所以'* int_ptr'寻址不属于你的内存,即UB。您甚至不知道指针未初始化的位置。除此之外,您尝试使用int(4或8字节)再次读取char(1字节),这也是UB。 – 4386427