我正在尝试编写一个函数,该函数将一个void指针指向一个int,然后将int加倍,并将其放回内存位置:
void doubleNumber(void *number){
number = &((*((int*)(number))) * 2);
}
所以首先我将它从void *转换为int *,然后我用int *来获取值,然后乘以2然后我得到它的地址将它放回指针。
任何人都可以告诉我为什么我的逻辑无效吗?
由于
答案 0 :(得分:4)
我这样写:
void doubleNumber(void *number){
*(int*)number *= 2;
}
首先,将number
转换为int*
类型。然后取消引用指针。然后加倍。
您的代码的问题在于您正在分配指针而不是指针。
答案 1 :(得分:3)
第1步:
void doubleNumber(int *value) {
*value = 2 * (*value);
}
第2步:
void doubleNumber(void *value) {
int * ivalue = (int *)value;
*ivalue = 2 * (*ivalue);
}
答案 2 :(得分:0)
值(例如2)没有地址。
相反,只需写下:
* (*int)number = *(int*) number) * 2;
或者更短:
* (*int)number *= 2;
答案 3 :(得分:0)
首先,C中函数的参数是按值传递的,因此修改number
将不起作用。
其次,即使它确实如此,你应该首先为值分配一些内存。只有这样才能在内存中返回指向这个地方的指针。