基本指针用法

时间:2011-10-17 21:49:00

标签: c memory pointers casting

我正在尝试编写一个函数,该函数将一个void指针指向一个int,然后将int加倍,并将其放回内存位置:

void doubleNumber(void *number){
    number = &((*((int*)(number))) * 2);

} 

所以首先我将它从void *转换为int *,然后我用int *来获取值,然后乘以2然后我得到它的地址将它放回指针。

任何人都可以告诉我为什么我的逻辑无效吗?

由于

4 个答案:

答案 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将不起作用。

其次,即使它确实如此,你应该首先为值分配一些内存。只有这样才能在内存中返回指向这个地方的指针。