goto和void分析_第1页
goto和void分析_第2页
goto和void分析_第3页
goto和void分析_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、summary 1) 一般工程发中需要禁用goto 语句,不同的编译器对goto 语句的处理可能不同。2)在 c 语言中,如果函数没写返回值,则默认返回值类型int ;如果函数没有写参数列表,则函数接受任意数量的参数。因此,如果函数没有返回值,必须显式声明返回值类型为void ;如果函数没有参数,则必须声明参数列表为void 。3)void 一种基础类型,但不基础数据类型,所以无法用来定义变量(c语言没规定 void 多内存空间的别名)。4)对于标准 c 语言规范,不允许sizeof(void) 这种写法,如 bcc 编译器;对于扩展 c 语言,可能允许 sizeof(void) 这种写法,如

2、 gcc 编译器,输出为 1。5)void* 指针的主要作用:用于接收任意类型的指针。在c 语言中, void* 和type*可以相互转换;在c+中,void* 可以作为左值接收任意类型的指针,作为右值时,必须进行强制类型转换。goto 和 void 1、goto goto 语句带有很浓厚的汇编语言特性,能够跳转到指定的语句,如同汇编语言的跳转指令。在工程实践中,一般都禁用“goto”。goto 会破坏程序的结构,带来意想不到的。/ 代码示例:以下代码输出什么?int main() goto end; int i = 0; end: printf(i = %dn, i); return 0;

3、gcc 编译器:编译 error ,提示 i 变量的初始化被跳过了。vs 编译器:编译警告warning ,提示 i 未初始化,但编出了可执行程序。运行的结果随机值,意料之外的!2、void 2.1 void 修饰返回值和参数在 c 语言中:如果函数没有返回值,那么应该将其声明为void 如果函数没有参数,应该声明其参数为void 注意, c语言中:如果函数没写返回值,默认的返回值类型int 如果函数没有声明参数列表,默认接受任意多参数f() int main() int i = f(1, 2, 3); / ok return 0; 2.2 否存在 void 类型的变量?结论:不存在 void

4、 类型的变量void 一种基础类型,但不基础数据类型;c语言中没有定义void 究竟多内存的别名,所以也无法定义对应的变量。int main() void var; / error void arr5; / error return 0; 小贴士 : ansi c :标准 c 语言规范,如 bcc 编译器扩展 c:在 ansi c的基础上进行了扩展,如gcc 编译器/ void类型有小么?int main() prinft(%dn, sizeof(void); return 0; gcc 编译器, demo 可以编过,输出为1 bcc 编译器,编译,提示void 不允许的类型。2.3 void

5、 类型的指针在 c 语言中,对指针类型的检查不那么严格,所以void 类型的指针可以和任意数据类型的指针进行相互转换。/ test.c int main() int* p = nullptr; void* pv = p; / ok char* pc = pv; / ok return 0; 在 c+语言中,对类型进行了增强,同事也兼容了c语言中的写法。 void 可以作为左值接受任意类型的指针,但,void 作为右值时,就必须进行强制类型转换。/ test.cpp int main() void* pv = nullptr; / 初始化个好习惯 int* pi = pv; / error, invalid conversion from void* to int* int* pi = (int*)pv; / ok, due to cast return 0; 总结: void* 指针的主要作用,用于接收任意类型的指针。示例 demo:将数组所占内存全部置0 void memset(void* src, int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论