int size=2;
char *a0;
char **allargs;
short *a1;
void **args;
allargs=(char **)malloc(size*sizeof(char *));
allargs[0]="a";
allargs[1]="100";
args=(void **)malloc(size*sizeof(void *));
a0 = malloc(sizeof(char *));
*a0=(*allargs[0]);
args[0]=(void *)&a0;
fprintf(stderr,"assigned %c %c\n",*a0,*((char *)args[0]));
a1 = malloc(sizeof(short *));
*a1=atoi(allargs[1]);
args[1]=(void *)&a1;
fprintf(stderr,"assigned %d %d \n",*a1,*((int *)args[1]));
由于某种原因,我得到以下输出
指定了(应该是a)
分配100 166696(应为100 100)
答案 0 :(得分:1)
你应该将args [0]和args [1]转换为char **和int **。
fprintf(stderr,"assigned %c %c\n",*a0,**((char **)args[0]));
fprintf(stderr,"assigned %d %d \n",*a1,**((int **)args[1]));
答案 1 :(得分:0)
当您使用a0
和a1
的地址填写args
时,您将获得双指针。计算输出时,您只需取消引用一次。有两种方法可以解决此问题以获得所需的输出。你可以改变
args[0]=(void *)&a0;
到
args[0]=(void *)a0;
并更改
args[1]=(void *)&a1;
到
args[1]=(void *)a1;
以便args
包含单个指针, OR 可以更改
fprintf(stderr,"assigned %c %c\n",*a0,*((char *)args[0]));
到
fprintf(stderr,"assigned %c %c\n",*a0,**((char **)args[0]));
并更改
fprintf(stderr,"assigned %d %d \n",*a1,*((int *)args[1]));
到
fprintf(stderr,"assigned %d %d \n",*a1,**((int **)args[1]));
在显示期间双重取消引用args
。