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内核: ...
随机推荐
- N - Aroma's Search CodeForces - 1293D math+greedy
作为DIV2的D题来讲,这个题目不算难. 题目大意:再规定的时间内寻找宝藏,第i个宝藏的位置为a*x(i-1)+b,a*y(i-1)+b.然后给出初始位置xs,ys和时间t让求再时间t内能够寻找到多少 ...
- C - Sweets Eating
规律题 前缀和+规律 先求前缀和...答案为c[i]=arr[i]+c[i-m]//i>m时. #include<bits/stdc++.h> using namespace std ...
- Co-prime 杭电4135
Given a number N, you are asked to count the number of integers between A and B inclusive which are ...
- BUUOJ [CISCN2019 华北赛区 Day2 Web1]Hack World
补一下这道题,顺便发篇博客 不知道今年国赛是什么时候,菜鸡还是来刷刷题好了 0X01 考点 SQL注入.盲注.数字型 0X02自己尝试 尝试输入1 赵师傅需要女朋友吗???随便都能有好吧 输入2 ?? ...
- 理解java容器底层原理--手动实现LinkedList
Node java 中的 LIinkedList 的数据结构是链表,而链表中每一个元素是节点. 我们先定义一下节点: package com.xzlf.collection; public class ...
- ES6新增的 Set 和 WeakSet 是什么玩意?在此揭晓
现在的章节内容会更加的紧密,如果大家看不懂可以先去看以前的文章,当然看了的忘了,也可以去看一下,这样学习后面的内容才会更加容易. 什么是Set结构 Set是ES6给开发者带来的一种新的数据结构,你可以 ...
- ApiPost的预执行脚本和后执行脚本
ApiPost的预执行脚本和后执行脚本主要是用来定义变量.但是它们有什么区别呢? 预执行脚本 在当前接口发送请求前执行的脚本,可以理解为beforeSend的时候执行. 一般在这里,我们可以设置一些前 ...
- 2019-2020-1 20199325《Linux内核原理与分析》第九周作业
第九周作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确: 使用gdb跟踪分析一个sc ...
- jstat命令查看JVM 的GC状态
转载于 https://www.cnblogs.com/alter888/p/10407952.html jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat ...
- JDK 15 JAVA 15的新特性展望
目录 JEP 371: Hidden Classes JEP 372: 删除 Nashorn JavaScript Engine JEP 377: 新的垃圾回收器ZGC正式上线了 JEP 378: T ...