C函数返回类型的默认定义类型是void

蒲唯梁
导读 大家好,乐天来为大家解答以下的问题,关于C函数返回类型的默认定义类型是void这个很多人还不知道,现在让我们一起来看看吧!1、c语言规定,

大家好,乐天来为大家解答以下的问题,关于C函数返回类型的默认定义类型是void这个很多人还不知道,现在让我们一起来看看吧!

1、c语言规定,函数返回值的类型是由函数首部定义的类型决定。

2、函数返回值应与首部定义的类型一致,如若不一致,则自动将返回值强制转换为函数首部定义的类型。

3、没有定义类型时默认为int型。

4、也就是说你的函数是什么类型,返回值就是什么类型。

5、比如:函数定义 int fun(int a,char b)返回值就是整型函数定义 int *fun(int a)返回值就是基类型为整型的指针函数定义 void fun(int a)无返回值扩展资料函数可以有返回值,只要 return 就可以给出一个,不过常常不用它,有两个原因:C/C++里返回值是复制出去的,而对于大的对象,复制的代价很高;2、有些对象是不能复制的,至少编译器不知道怎么复制,比如数组。

6、于是有了下面这样的函数:bool GetObj(ObjType& obj);bool Encode(const char* src, char* dest);用一个参数来代替返回值,而返回值只是指示函数执行是否成功。

7、返回一个大对象是困难的,但这个困难存在于 C 程序中,而不是 C++ 程序中。

8、 C 函数里较少通过返回一个指针来返回对象,因为:如果指针指向栈变量,毫无疑问,要么不用这个返回值,要么是一个错误;2、如果指针指向堆变量,需要用这个函数的程序员会好好的看文档且足够细心会调用 free,要么就是内存泄漏;3、如果指针指向 static 变量,那么用这个函数的程序员牢牢记住“下次调用这个函数以后,上次的返回值也会跟着变”。

9、在C++里直接返回裸指针的话,情况并不会有什么起色,不过 C++ 有智能指针的,通常它们指向堆变量,占用的空间和裸指针一样大。

10、考虑前面第一个函数,写成:std::auto_ptr GetObj();返回值如果不要,作为临时变量,会立即被析构,返回的对象被释放;如果需要,就得赋值给另一个智能指针。

11、总之不用程序员记得,编译器会保证这个对象的释放。

12、考虑第二个函数,稍微有一点麻烦,因为 auto_ptr 是不能用来持有数组的,不过,在C++的世界里,std::string 几乎总是比 char* 好用:std::auto_ptr Encode(const char* src);最后考虑最麻烦的情况:bool AssembleObjList(ObjType objList[], size_t length);。

本文分享完毕,希望对大家有所帮助。

标签:

免责声明:本文由用户上传,如有侵权请联系删除!