Void函数作为指针
Void function as pointer
这两者之间有什么区别:
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;"该内存将无法正确初始化。我认为结果将与尝试使用未初始化的变量相同。尽管如果你不使用结果,它不会破坏你的程序。
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址