簡體   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