[英]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.