【发布时间】:2021-05-08 15:41:27
【问题描述】:
我不明白为什么指针类型转换是必要的,只要指针指向一个地址并且它们的类型仅在涉及指针算术时才重要。
也就是说,如果我遇到下一个代码sn -p:
int a = 5; 然后都是
char*b = (char*)&a; 和 int*c = (int*)&a
指向同一个内存位置。
确实,在执行char*b = (char*)&a时,可能会丢失部分内存内容,但这是因为b的类型是char*,它只能存储sizeof(char)字节的内存,这是可以做到的隐含的。
【问题讨论】:
-
您不能随意更改指针类型和访问内存。 What is the strict aliasing rule? 有很多错误的代码违反了这条规则,你会被告知“但它有效!”那些不了解未定义行为的后果的人包括 appears 起作用。因为它只会“起作用”,直到它不起作用。例如:gcc, strict-aliasing, and horror stories
-
我看到一个强制转换是给编译器的信息:“我知道我做错了什么,请不要抱怨,去做吧。”
-
这里要解释的东西太多了。指针类型兼容性、对齐方式、指针大小、指针别名、数据类型表示、字节序等。
标签: c pointers gcc types casting