c - 即使在类型转换之后,是否每次都需要取消引用 void 指针?

标签 c

即使在 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 

最佳答案

问题出在第一行中的 ptr 声明。你似乎希望它是

int *ptr; /* NOT void* */

否则你每次都必须施放它。 C/C++ 使用编译时声明,并且对 malloc 的强制转换在它出现的行之后不起作用。特别是

ptr = (int*)malloc(sizeof(int)); /* the (int*) HAS NO EFFECT when ptr is declared void* */

关于c - 即使在类型转换之后,是否每次都需要取消引用 void 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332492/

相关文章:

c - 将 double 映射到 long 数字的函数

c - 如何将动态分配的结构和 double 子结构的内容传输到数组? (C)

c - malloc 和 realloc 数组给出意外输出

c - 如何实现 timespec 累加器?

c - Atoi 函数无法正确转换字母

c - 如何使用结构体成员初始化结构体?

c - X86-64 C 内联汇编(使用 GCC 编译),多精度乘法例程导致段错误

当 sprintf 太昂贵而无法使用时,在 C 中将 int 转换为 char*

c - 如何将包含指针的结构从用户空间复制到内核

c - 请解释跟随 Actor 的意思