- 「初识C语言」C语言保留字(关键字)详解
- 来源:老九学堂
保留字(reserved word)
保留字又称关键字。
指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。
每种程序设计语言都规定了自己的一套保留字。
例如:BASIC语言规定不能使用LIST作为变量名或过程名,因为LIST是一个BASIC语言专用于显示内存程序的命令。
C有 22+10 = 32个关键字
C++ 有22+10+11+20 = 63 个关键字
JAVA 有22+ 9+ 17 = 48 个关键字 ps:以上内容来自百科。
其中,C89中,(C语言标准)中,
类型说明保留字:
int,long,short,float,double,char,unsigned,signed,const,void,volatile,enum,struct,union
语句定义保留字:
if,else,goto,switch,case,do,while,for,continue,break,return,default,typedef
存储类说明保留字:
auto,register,extern,static
长度运算符保留字:
sizeof
具体含义如下:
下面,我们就几个相对比较容易用错的保留字进行分析,主要包括
return, void, const, break, continue
以下内容参阅《c程序设计竞赛实训教程》和一些大牛博客结合写的。
1.return
return:结束一个函数并返回其后面表达式中的值。
初学的时候,有些不理解main 函数中return 0;有什么用,在写程序的时候老是忘记带上了。其实,带上return 0;是很有必要的。
main函数的返回值用于说明程序的退出状态,如果返回0,表示程序正常退出,否则表示程序异常退出。返回值传递给程序的激活者(操作系统)。
如果没有写return语句的话,c99(c语言标准)规定编译器自动在生成的目标文件中加入return 0;表示正常退出。
所以,为了代码规范,我们一般都必须带上return 0;
具体操作----- return (表达式);
其中,括号是可以省略的。一般不省略,如果返回值为表示式的时候容易造成混淆。
return返回值的类型:一般是函数定义的类型,如果return后表示式的值类型和函数值的类型不一致,则以函数函数类型为准,即:函数类型决定返回值类型。
需要注意的一点,也是易错的一点是:return不能返回指向局部变量的类型。----因为在函数结束时局部变量被自动销毁(上篇博客提及的局部变量的生存周期),则返回的指针为指向已释放的空间,再通过此指针进行操作就会产生错误。
下面通过程序具体说明:
看下输出结果 4,3
程序中,函数test的返回值为指向局部变量num的指针,当主函数调用test函数的时候,返回ptr指针并且赋值给p指针变量,即num变量的地址赋给了p,但是必须明白,在test函数结束的时候,局部变量num的空间被释放了,这样用p来引用这个空间就会出错。
乍一看,和预期的一样,但是实际上,这样的程序是存在隐患的。
下面改改这个程序,就知道错在哪了。
运行结果:15,7(也可能是15,9视具体环境而定。)
在这里,多了个test2函数。发现结果并不是我们预料的15,3 。p指向空间的数据不是之前num所赋值的3.
这正印证了我们之前说过了,这样的返回存在隐患。在test函数调用完后,系统释放之前给num分配的空间,但是p指针仍然指向那块区域。
在调用test2的时候,系统要为x,y分配空间。这时候就会把之前释放的那块空间给x,y再次分配使用,使用在赋值语句后,该空间的值发现了改变,使得*p发生了改变。
所以,切记 return不能返回指向局部变量的类型。
2.void
void :void为空类型。void *为空类型指针。
其中,void a;是不允许的。每次定义一个变量,系统都会为其分配空间,而void类型无法确定,系统就不知道该为它分配多大的空间,显然是不合理的。
void *p;是允许的, 因为这是一个指针变量,系统都是默认分配四个字节的空间,至于具体指向的空间总存放的数据类型,就由用户自行操作。
并且,在操作的时候,要把该void指针强制转换为相应类型的指针后才可进行操作。
如:
即:在使用void类型指针变量时,其他类型的地址可以直接赋值给void类型的指针变量,但反过来,void类型的指针变量赋值给其他类型的指针变量或取其所指空间数据时必须进行强转。
3.const
const:constant的缩写,意为不变。即用const修饰的变量的不允许改变的。也可称为只读变量。
例如:int const m = 10; const int m = 10; (二者可以认为等价,const定义一般的变量比较简单。例如该例中都是限定m为10)
但是要注意一点,只读变量虽然值不能改变,但它还是变量,不是常量。
如 int const M = 10; int a[M]; 这样定义数组是错误的。我们知道,定义数组时,数组元素个数必须是常量(这样系统才知道要分配多大的空间),而M的本质是变量,只是值不改变的变量而已。
所以,一般我们定义数组采用这样的操作:
下面讨论下const定义指针,这就比较复杂了。
至于地址,数据,拿const int *p;举例。此时,p=&a;操作是允许的,(修改地址)。而*p=10;是允许的(试图改变数据造成错误)。
在判读是修饰*p还是p时,我们可以先将定义中的类型标识符去掉(int),再观察const后面修饰的内容。
4 break,continue
至于break和continue,二者关系比较密切,结合探讨。break退出当前循环,continue退出当次循环
continue
1、结束本次循环(不执行本次循环中continue后面的语句),继续下次循环条件判断;
2、不可作用于switch语句。当在switch中使用,这个continue实际是作用于其所属的循环结构;若它不属于任何一个循环,程序将因此报错!
break
1、结束整个循环,并停止下次循环条件判断;
2、可以作用于switch语句。
具体区别如下:
break和continue的区别如下:
break可用于switch语句,表示跳出整个switch块,而continue则不能用于switch语句
它们都可用于循环语句的循环体,所谓的区别也应该是它们对循环次数的影响不同。break用于立即退出当前循环,而continue仅跳过当次循环(本次循环体内不执行continue语句后的其它语句,但下次循环还会执行)。举例说明。
上面的循环会因为break语句而在i=6时提前终止,这样s的最终值就是1+2+3+4+5
如将break换成continue
当i=6时就不会将i累加到s中,s的最终值是1+2+3+4+5+7+8+9+10,唯独少一个6。
需要更多学习笔记干货的小伙伴、欢迎关注公众号【老九学堂】(づ ̄3 ̄)づ╭❤~
科学
-
-
- 华为5G对手“爱立信”公开表示不赞成华为出售5G源代码行为
- 根据此前公开数据显示,截止2019年6月6日,华为目前已经在全球30个国家获得了46个5G商用合同,而且5G基站发货数量也是超过了10万个,且这两项数据均居于行业首位。 诺基亚截止到今年7月份已经拿到
- 复利奇迹捕手
-
-
-
- 小米搅局理发器行业,一个月众筹300万营业额,在家自己就能理发
- 自从2015年小米众筹开始,其旗下小米智能家居生态链的发展可谓是风生水起,小米众筹的出现,更是让小米科技价格屠夫称号也是越叫越响!而今天带给大家是小米众筹上架的一款:映趣Boost理发器。 随着生活水
- 空空好物
-
-
-
- 2019法兰克福车展新能源概念车盘点,红旗E115十足中国范儿
- 法兰克福汽车展2019年正如火如荼地进行,作为世界上排名最高的车展,制造商在展会期间都会有“大动作”。中国作为最重要的汽车市场之一,中国的重要程度不言而喻。让我们看看哪些汽车将在这次车展上进入中国市场
- 跑车重机杂志
-
-
-
- 「初识C语言」C语言保留字(关键字)详解
- 保留字(reserved word) 保留字又称关键字。 指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。 每种程序设计语言都规定了自己的一套保留字。 例如:BASIC语言
- 老九学堂
-
-
-
- 不适合青少年的网络功能该关就关
- 互联网企业千差万别,运营内容各不相同,只要涉及保护青少年安全合理使用网络,任何网络平台都不能以各种借口逃避责任,必须执行统一标准,不能有例外。网络平台不适合青少年使用的功能,该下线的就要下线,该关闭的
- 人民日报
-
-
-
- 打破三大通信运营商“垄断”,第四家运营商来了!你会选择它吗
- 近日消息,继中国移动、中国电信、中国联通三大运营商之后,第四家通信运营商出现了,它就是中国广电! 近日网上一则“中国广电5G试验网的建设实施方案”曝光,在该方案中,广电表示其5G试验网将以“中国广电”
- 逗趣搞机博主
-
-
-
- iPhone11上市没一个月就破发!iPhone11已跌至“国产价”,买早了
- 苹果的iPhone一直是高端旗舰的代表,曾几何时,如果你拿了一部iPhone手机,那肯定会被别人说是土豪,因为iPhone的价格一直是在5000以上的,这样的价格对于普通消费者来说,还是很贵的。光因为
- 科技六分钟
-
-
-
- 邓中翰的“中国芯”:从江苏南京到美国名校,出国就是为了归国
- 众所周知,伴随着当今人类技术文明的不断发展,“芯片”的重要性不言而喻。芯片是一个企业能够成功的关键,也很有可能与国家安全有关,一些战斗机、坦克上都装有大量的高技术芯片,可见芯片已经在人类“未来化”进程
- 教育思享
-
-
-
- 魅族创新环绕式天线设计,金属材质却做出玻璃质感,魅族灵魂还在
- 魅族手机可以说是起的最早却赶了个晚集,从pro7失利之后,魅族似乎一蹶不振,后续发布的魅族16还可以,但是缺货直接导致销量大滑。最近16系列连着发布了两年依旧没有结束,众多的16型号让人看的眼花缭乱。
- 乐萌
-
-
-
- 京东商城被央视点名 该商品不合格率高达41.7%
- 在快速发展的信息化时代中,众多以互联网为背景的新兴产业开始成为了人们生活当中不可缺少的一部分,多数的人在购物方面逐渐的有传统购物方式变为网上购物,有着明码标价的商品可以进行对比,毕竟在多数人看来,互联
- weekend时光
-
-
-
- 16个让你相见恨晚的免费网站,让你大开眼界
- 互联网上有许多这样的网站:他们鲜为人知,只在少数深度网络用户之间传播;但并不代表他们不好用。相反,他们都是那种一见到就能把人牢牢吸引住的实用网站,而且这次介绍的这些网站不但好用、有趣而且都是可以免费使
- 江湖数码
-
-
-
- 优酷花3年夺回“优酷”,这份坚持却未必适合你
- 说起优酷,许多人都不陌生,作为中国知名的互联网视频平台,优酷和爱奇艺、腾讯视频并称三大视频网站巨头。它的新闻,自然能引起不小的关注。 (图片来源/图虫创意) 优酷公司最初名叫合一网络技术有限公司(
- 八戒知识产权
-
-
-
- 小米又出新产品,众筹首发价99.9元
- 10月12日,小米正式带来了小米众筹计划的第419个产品,Haylou Smart Watch智能手表,它可以作为您的独家教练来科学地监控您的每种运动状态,该新产品的众筹价格仅为99.9元。据了解,H
- m智能家居
-
-
-
- 坚果Pro3就长这样!不知道真机质感能不能加分
- 时间已经到了10月中旬,距离坚果新机曝光的发布时间仅仅只有半个月了,但是官方依旧没有任何消息,曝光还是只能靠网友。不过,这次确实有新料。 首先,这次坚果新机命名就叫做坚果Pro3,定位中端,所以什么骁
- 皮皮说数码
-
-
-
- 荣耀20大家族人丁兴旺,再添新成员
- 继荣耀20i、荣耀20系列、荣耀20S后,荣耀20家族再添一名新成员,荣耀20青春版 荣耀20青春版将在本月22日发布,形象大使是“不加糖”,大家猜猜会是谁呢?再看荣耀的配色,毕竟华为的配色一直引领者
- 客家小筑
-