基本指针用法

发布于 2024-12-10 10:41:34 字数 284 浏览 1 评论 0原文

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

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

} 

所以首先我将它从 void * 转换为 int *,然后我尊重 int * 得到该值,然后乘以 2,然后得到该值的地址并将其放回指针中。

谁能告诉我为什么我的逻辑不起作用?

谢谢

I'm trying to write a function that takes a void pointer to an int and then doubles the int, and puts it back into the memory location:

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

} 

So first I cast it into an int * from a void *, then I deference the int * to get the value, then I multiply by 2 and then I get the address of that to put it back into the pointer.

Can anyone give me tips on why my logic is not working?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

寄居人 2024-12-17 10:41:34

我会这样写:

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

首先将 number 转换为 int* 类型。然后取消引用指针。然后加倍。

您的代码的问题是您正在分配指针而不是受指点。

I'd write it like this:

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

First of all cast number to be of type int*. Then dereference the pointer. Then double it.

The problem with your code is that you are assigning the pointer rather than the pointee.

幸福丶如此 2024-12-17 10:41:34

步骤 1:

void doubleNumber(int *value) {
    *value = 2 * (*value);
}

步骤 2:

void doubleNumber(void *value) {
    int * ivalue = (int *)value;
    *ivalue = 2 * (*ivalue);
}

Step 1:

void doubleNumber(int *value) {
    *value = 2 * (*value);
}

Step 2:

void doubleNumber(void *value) {
    int * ivalue = (int *)value;
    *ivalue = 2 * (*ivalue);
}
掐死时间 2024-12-17 10:41:34

首先,C 中函数的参数是按值传递的,因此修改 number 不会产生任何效果。

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

Firstly, arguments to functions in C are passed by value, so modification of number will have no effect.

Secondly, even if it did, you should allocate some memory for the value first. Only then can you return a pointer to this place in memory.

苹果你个爱泡泡 2024-12-17 10:41:34

值(例如 2)没有地址。

相反,只需写:

* (*int)number = *(int*) number) * 2;

或者更短:

* (*int)number *= 2;

A value (such as 2) has no address.

Instead, simply write:

* (*int)number = *(int*) number) * 2;

or, shorter:

* (*int)number *= 2;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文