[英]how can I use void** function(void**)
我正在讀一個程序,我發現了這個功能:
void** function(void**)
我的問題是我可以提供什么樣的參數以及我的返回值應該是多少?
* 更新!!! *
我可以閱讀它,我知道它可以是任何類型的指針指針,問題是如何使用它? (我剛剛編輯了標題)提前感謝!
功能聲明:
void **functionName( void**);
...讀作:“ functionName
是一個傳遞雙void指針並返回雙void指針的函數 ”。 它傳遞一個雙void指針並返回一個雙void指針。
在通用ADT中看到void指針,比較函數,破壞函數等是非常常見的(留下這個細節,但它很重要 - 在OPs注釋中提到)。
示例(非感性功能):
將此視為您的數組。 假設您想要將第一個元素變為字符串“Hai”,而不是“Hello”(它太優雅了)。
char *arr_of_str[] = { "Hello", "Hi", "Hey", "Howdy" };
...那么你的功能我們如下:
void **functionName( void** ptr ) {
char **ptr_char = ptr;
( *ptr_char )[ 0 ] = "Hai";
return ptr;
}
這是一個函數,指針指向void
,並返回一個指針,指針void
。
你可以像這樣使用它:
int something = 5;
void* somepointer = &something;
functionName(&somepointer);
void *
可以指任何類型的地址。 你可以把它讀作:'指向內存中某些東西的指針'。 所以這意味着,它可以指向一個整數,一個字符串,一個對象,......一切。 一些例子:
void *anyObject;
int a = 1;
float b = 2;
char *c = "somestring";
function aFunction(int a)
{
...
}
anyObject = &a;
anyObject = &b;
anyObject = &c;
anyObject = &aFunction;
這些都是有效的作業。
回到你的問題: void **
是指向void的指針; 用正確的英語:它指向內存中存儲void *
值的位置。 繼續上面的例子:
void **p;
p = &anyObject;
一般來說, void *
是危險的,因為它們不是類型安全的。 為了使用它們,你必須將它們轉換為已知類型。 如果你把它變成非法的東西,編譯器就不會抱怨。
好的,你怎么用它? 嗯,這很難回答,因為我們無法從聲明中得出預期的類型。 此外,此函數可能會在函數內部分配內存並在參數內返回。 但是,一般原則是:獲取'指向某事物的指針'的地址(&),然后將其傳遞給函數。
int a = 0;
int *pa = &a;
functionName(&pa);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.