我怎样才能使用void **函数(void **)

时间:2013-08-14 09:24:35

标签: c++ c

我正在读一个程序,我发现了这个功能:

void** function(void**) 

我的问题是我可以提供什么样的参数以及我的返回值应该是什么?

* UPDATE !!! *

我可以阅读它,我知道它可以是任何类型的指针指针,问题是如何使用它? (我刚刚编辑了标题) 提前致谢 !

3 个答案:

答案 0 :(得分:7)

函数声明:

void **functionName( void**);

...读作:“functionName 是一个传递双空指针并返回双空指针”的函数。它传递一个双void指针并返回一个双void指针。

在通用ADT中查看void指针,比较函数,销毁函数等是非常常见的(详细说明了这一点,但它很重要 - 在OP评论中提到)。

示例(非感性功能):

将此视为您的数组。假设您想将第一个元素变为字符串“Hai”,而不是“Hello”(它过于优雅)。

char *arr_of_str[] = { "Hello", "Hi", "Hey", "Howdy" };

...那么你的功能我们如下:

void **functionName( void** ptr ) {
  char **ptr_char = ptr;

  ( *ptr_char )[ 0 ] = "Hai";

  return ptr;
}

答案 1 :(得分:4)

这是一个函数,它指向指向void的指针,并返回指向void的指针。

您可以像这样使用它:

int something = 5;
void* somepointer = &something;

functionName(&somepointer);

答案 2 :(得分:1)

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);