C语言进阶_goto与void解析
世间真正温煦的春色,都熨帖者大地,潜伏在深谷。
一.简介
goto与void是两个不常用的关键字,C语言中的Goto关键字传承字汇编语言,使用方法也与汇编语言相同。void是类型关键字,可修饰函数和变量。
二.关键词详解
2.1 goto
2.1.1 使用方法
#include <stdio.h> void main(void){
goto C; //可直接跳转到标识的位置,忽略中间的程序。
printf("%d\n",sizeof(void)); C:
printf("this is goto!\n"); }
2.1.2 疑点
C程序,无论多么复杂,总是由顺序结构、选择结构和循环结构组成,而使用goto语句会破坏C程序的结构性,因此现代企业开发的C程序都默认不适用goto语句。
2.2 void
2.2.1 使用方法
void与int 、char等基本类型不同,它是抽象的类型,不映射具体的内存空间。在标准的ANSCI规范中的void类型映射的内存大小为0字节,使用sizeof(void)返回的数值是0。很多现代企业类如GUN觉得标准的C语言规范太简单,不使用,于是在ANSCI规范的基础上做了修改。比如GUN标准就是从ANSCI上修改而来的,使用GUN标准的编译器中GCC中void类型表示的内存大小是一个字节,即Sizeof(void)=1。
>作为参数,表示函数不需要传入实参。
>修饰函数,表示函数可以不返回数值。
#include <stdio.h> f1(){ } void f2(void){ }
int main(void){ char i=f1(,,,); //为设置参数类型和返回类型的函数,可以传入任意类型和数量的参数,默认返回值为1; f2(); //void类型的参数表示不接受任何类型参数传入。 printf("count of i:%d\n",i); return ;
}
2.2.2 疑点
>void不可以修饰变量,因为是抽象的类型,不映射具体的内存大小。
>C语言是开放的语言,不写参数和返回类型的函数,默认可以传入任意类型和数量的参数,而非不写参数类型就不能传入参数,这里可以看出void类型的作用。
>void*作为左值,可以接收任意类型的指针。作为右值,需要进行强制类型转换。
int main(void){ char num=; char* c=# char* i; void* v; v=c; //void* 作为左值 i=(char*)v; //voi* 作为右值 printf("%d\n",*i); return ;
}
C语言进阶_goto与void解析的更多相关文章
- C语言进阶——goto 和 void 的分析08
遭人遗弃的goto: 高手潜规则:禁止使用goto 项目经验:程序质量与goto的出现次数成反比 最后的判决:将goto打入冷宫 程序示例1:(goto副作用分析) #include <stdi ...
- 《C语言进阶剖析》课程目录
<C语言进阶剖析>学习笔记 本文总结自狄泰软件学院唐佐林老师的<C语言 ...
- C# 语言的两个html解析器
基于C# 语言的两个html解析器 基于C# 语言的两个html解析器 1)Html Agility Pack http://nsoup.codeplex.com/ 代码段示例: HtmlDocu ...
- 基于C# 语言的两个html解析器
基于C# 语言的两个html解析器 1)Html Agility Pack http://nsoup.codeplex.com/ 代码段示例: HtmlDocument doc = new HtmlD ...
- 【R笔记】R语言进阶之4:数据整形(reshape)
R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...
- Xamarin XAML语言教程XAML文件结构与解析XAML
Xamarin XAML语言教程XAML文件结构与解析XAML XAML文件结构 在上文中,我们创建XAML文件后,会看到类似图1.16所示的结构 图1.16 结构 其中,.xaml文件和.xaml ...
- 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...
- Android的init过程(二):初始化语言(init.rc)解析
Android的init过程(一) 本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 在上一篇文章中介绍了init的初始化第一阶段,也就是处理各种属性.在本文将会详细分析i ...
- Android的init过程(二):初始化语言(init.rc)解析【转】
转自:http://www.cnblogs.com/nokiaguy/p/3164799.html Android的init过程(一) 本文使用的软件版本 Android:4.2.2 Linux内核: ...
随机推荐
- First Training
B B - Local Extrema CodeForces - 888A You are given an array a. Some element of this array ai is a l ...
- 忍不住还是手写了一遍博客的css
F12边调边改,的一点一点撸出来这个效果.感觉已经可以了.日历感觉没什么用直接隐藏了.
- 01、WireShark——ARP 协议包分析
1. 什么是ARP ARP(Address Resolution Protocol)协议,即地址解析协议.该协议的功能就是将 IP 地 址解析成 MAC 地址. ARP(Address Resolu ...
- Python冒泡排序算法及其优化
冒泡排序 所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了.(图中排好序的元素标记为黄 ...
- MVC-前端设计
来源于:https://www.cnblogs.com/miro/p/4030622.html 从前端的UI开始 MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端U ...
- 安装宝塔检测到系统已存在Apache,请使用纯净安装
执行命令 停止服务 net stop Apache2.4 删除服务 sc delete apache
- c++库 c语言接口
//code in add.cxx #include "add.h" int sample::method() { cout<<"method is call ...
- webform 最后的黄昏之力
前言 现在有人谈起webform 一般都会说这种技术已经过时了,毫无用处. 因为我们在日常开发中已经不会去开发哪种几个简单的网页的程序,我们的业务更加复杂,这种拖动式的过于死板. 但是是否毫无用处呢? ...
- Spring boot 自定义banner
Spring Boot启动的时候会在命令行生成一个banner,其实这个banner是可以自己修改的,本文将会将会讲解如何修改这个banner. 首先我们需要将banner保存到一个文件中,网上有很多 ...
- SpringBoot 集成Swagger2自动生成文档和导出成静态文件
目录 1. 简介 2. 集成Swagger2 2.1 导入Swagger库 2.2 配置Swagger基本信息 2.3 使用Swagger注解 2.4 文档效果图 3. 常用注解介绍 4. Swagg ...