这是我的代码的示例:
void *a = NULL;
void *b = //something;
a = (void *)(*((char *)b + 4));
(b + 4)指向的值是我要存储在a中的地址。当我尝试编译时,我得到“警告:从不同大小的整数转换为指针。”这是什么意思,我该怎么做才能解决它?
编辑:为了澄清,我不希望'a'指向比'b'大4个字节的地址。在我的程序中,我知道存储在((char *)b + 4)的值本身就是另一个指针,我想将这个指针存储在'a'中。
答案 0 :(得分:2)
这是char*
:
(char *)b + 4
这意味着:
*((char *)b + 4)
是char
。然后继续将char
转换为void*
,编译器会抱怨。您不必手动转换为C中的void*
,所以这应该是:
a = (char *)b + 4;
评论更新:听起来就像你之后:
a = *(char **)((char *)b + 4)
答案 1 :(得分:0)
听起来是什么:你的指针出了点问题。
在这种情况下,重新检查一下你的表达式:你真的是char
的地址吗?
(void *)(*((char *)b + 4));
所以
(char *)b
是指向char
的指针,按
(char *)b+4
然后*((char *)b+4)
解除引用(char *)b+4
,因此类型为char
- 然后您尝试将该内容(可能是1个字节)转换为4或8字节地址。因此,尺寸不匹配。
答案 2 :(得分:0)
char *c = (char *)b;
char *d = c + 4;
a = (void *)
(*d); // <- this is c char and you want to cast it to a pointer
好像你写了太多的星号
答案 3 :(得分:0)
void *a = NULL;
char jig[10]="jigarkumar";
void *b = jig;
printf("b is %p",b);
a = (void *)(((char *)b + 4));
printf("\na is %p",a);
问题在这里
a = (void *)(*((char *)b + 4));
^
|
这个*获取存储在b + 4地址&amp;它被分配给一个错误的 所以只需删除那个&amp;你的代码可以正常工作