簡體   English   中英

我怎樣才能使用void **函數(void **)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM