即使在malloc声明中将类型转换为整数类型之后,每次我取消引用指针时,都必须在没有显式类型转换的情况下使用ptr。有人能解释为什么我打字后指针不会永远转换成int *。
void *ptr;
ptr = (int*)malloc(sizeof(int));
*ptr = 1; // This line does not work even after typecasting in the above line
*(int*)ptr = 1; //This line works
答案 0 :(得分:1)
问题是第一行中的ptr
声明。您似乎希望它成为
int *ptr; /* NOT void* */
否则,您每次都必须投射它。 C / C ++使用编译时声明,并且malloc
上的强制转换在它所在的行之后无效。特别是
ptr = (int*)malloc(sizeof(int)); /* the (int*) HAS NO EFFECT when ptr is declared void* */