繁体   English   中英

将 int 指针转换为 void 指针并返回以使用另一个 function 中的值?

[英]Converting a int pointer to a void pointer and back to use the value in another function?

我想将 int 指针转换为 void 指针,并将该 void 指针传递给 function,然后返回到 int 指针以在另一个 function 中使用该值。

void main(){
    int newSize = size;
    void *newSizePtr = &newSize;
    someFunc(newSizePtr);
}

void someFunc(void *newSizePtr){
    int actualValue = *((int *) newSizePtr);
}

这是将 int ptr 转换为 void ptr 然后返回使用该值的正确方法吗?

我无法将 memory 动态分配给指针本身,因为我的程序限制我不能使用 malloc。 IE

int *newSize = malloc(sizeof(int));

这就是我这样做的原因。

我还需要传入一个 void* 参数,因为在我的程序中我使用的是 pthread_create()。 这个 function 要求我将 void* 的参数传递给 function 这就是为什么我将它转换为 void* 然后在我需要使用它时返回

C 标准明确允许您进行的转换。 第 6.3.2.3p1 节关于指针转换状态:

指向void的指针可以转换为指向任何 object 类型的指针或从指针转换。 指向任何 object 类型的指针可以转换为指向void的指针并再次返回; 结果应与原始指针比较。

也没有必要显式地转换为 void * 或从void *转换。 所以你可以做这样的事情:

void someFunc(void *newSizePtr){
    int *actualValuePtr = newSizePtr;
}

int main(){
    int newSize = size;
    pthread_t tid;
    pthread_create(&tid, NULL, someFunc, &newSize);
}
#include <stdio.h>
#include <memory>

void someFunc(void*);

int main() {

    int size = 4;

    int newSize = size;

    void* newSizePtr = &newSize;

    someFunc(newSizePtr);

    // void* -> int*, before using
    int* newSize = (int*) malloc(sizeof(int));

}

void someFunc(void* newSizePtr) {

    int actualValue = *((int*)newSizePtr);

    printf("%d", actualValue);

}

是的,您可以将 void* 转换为 int*,将 int* 转换为 void *,

因为, void * 是“通用”指针。

malloc 返回通用指针 (void*) 因为 malloc 不知道您需要什么“类型”的返回。

所以,你需要转换成你需要的类型。

(在上面的代码中,需要转换为void* -> int*)

有关使用通用指针的更多信息,下面的链接可能会对您有所帮助

https://codexpart.com/what-is-generic-pointer-difference-between-generic-pointer-and-void-pointer/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM