如何从void*转换回int

w31*_*w31 16 c

如果我有

int a= 5;
long b= 10;
int count0 = 2;
void ** args0;
args0 = (void **)malloc(count0 * sizeof(void *));
args0[0] = (void *)&a;
args0[1] = (void *)&b;
Run Code Online (Sandbox Code Playgroud)

如何从args [0]和args0 [1]转换回int和long?例如

int c=(something im missing)args0[0]
long d=(something im missing)args1[0]
Run Code Online (Sandbox Code Playgroud)

Art*_*ski 18

假设你的&a0和&b0应该是&a和&b,并且你的意思是设置长d的args0 [1],你已经存储了一个指向args0 [0]的指针和一个指向args0 [1]中b的指针.这意味着您需要将它们转换为正确的指针类型.

int c = *((int *)args0[0]);
int d = *((long *)args0[1]);
Run Code Online (Sandbox Code Playgroud)


kei*_*thm 5

要从字面上回答你的问题,你会写

int c = *((int *)args0[0]);
long d = *((long *)args[1]);
Run Code Online (Sandbox Code Playgroud)

我对您的代码可能担心的是,您已经为指向您的位置的指针分配了空间,但没有为本身分配内存。如果您希望将这些位置保留到本地范围之外,则必须执行以下操作:

int *al = malloc(sizeof(int));
long *bl = malloc(sizeof(long));
*al = a;
*bl = b;
void **args0 = malloc(2 * sizeof(void *));
args0[0] = al;
args0[1] = bl;
Run Code Online (Sandbox Code Playgroud)