Void函数作为指针

Void function as pointer

本文关键字:指针 函数 Void      更新时间:2023-10-16

这两者之间有什么区别:

void copydata(void *, void *, size_t);

这个:

void *copydata(void *, void *, size_t);

当指针函数必须返回指针时,我使用指针函数,例如:

char *myName(int i)
{
  switch (i) { case 0: return "Jack"; break; default: return "Adam"; }
}

但在"void*copydata"示例中,该函数不必返回任何内容,而且它在两种情况下都能正确编译,并且在这两种情况中生成的asm代码似乎是相同的。

这两者有什么区别:

void copydata(void *, void *, size_t); // (1)

这个:

void *copydata(void *, void *, size_t); // (2)

3是CCD_ 4函数。这意味着它不会返回任何内容。(2)是返回指向-void(即void*)的指针的函数。它必须返回一些东西。

但在";void"复制数据";例如,函数不必返回任何内容,

这是不正确的。它必须返回void*,或者可以转换为CCD_8的东西。

并且它在这两种情况下都能正确编译,并且在这两个情况下生成的asm代码似乎是相同的。

不从非void函数返回是未定义的行为。编译器不允许产生错误,但生成的代码不可信。

请参阅此相关问题。

第一个是void函数:它不返回任何值。

第二个返回pointer to void:它返回一个指针

在发布的代码中,您将返回字符文字的地址。如果您在代码期望指针时没有返回任何内容,那么您将得到未定义的行为,因为您甚至没有在调用的"返回端"触摸指针,并且脏内存将到位(或者在最好的情况下,如果它是全局的,则初始化为零)。

更多信息请点击此处:https://stackoverflow.com/a/1610454/1938163

第一个函数将不返回任何内容,而第二个函数将返回一个void指针。

void copydata(void *, void *, size_t);

这意味着函数不会返回任何内容。其中as,

void *copydata(void *, void *, size_t);

意味着函数返回一个指针。在第二种情况下,函数应该返回一个指向任何事物的指针。

如果返回类型为void*,则必须返回一个没有类型的指针,其中具有void返回类型的函数不需要返回任何内容。但是,可以使用返回;在函数内(最后不需要)有条件地返回控件。

在内存分配方面:"void*copydata()"的行为将与"int*copyda()"answers"double copydata"等完全相同。这意味着堆栈上会分配一些内存来存储函数的返回值(取决于编译器的实现和优化)。如果不执行"return result;"该内存将无法正确初始化。我认为结果将与尝试使用未初始化的变量相同。尽管如果你不使用结果,它不会破坏你的程序。