【发布时间】:2019-08-09 08:37:21
【问题描述】:
当我用 gcc 7.3.0 编译这段代码时,我得到一个“来自不兼容指针类型的赋值”。
int intVar = 1;
char* charPointer;
charPointer = &intVar;
printf("%d", *charPointer);
到目前为止一切顺利。我可以通过这种方式进行指针分配来处理它:
charPointer = (char*)&intVar;
现在我的疑问是:第二种情况有何不同?如果我不将 charPointer 转换为 int* 时,我仍然会搞砸,例如将它增加 n 或取消引用它。那么为什么编译器在这两种情况下的行为不同呢?他为什么要关心分配期间指针类型是否不匹配?我只是想了解它背后的逻辑。
【问题讨论】:
-
第二种情况也不例外。您只是明确地告诉编译器“将此指针转换为
char *”,而没有转换,不清楚它是故意的还是潜在的错误。区别在于一个编译,另一个不编译。
标签: c pointers gcc gcc-warning