保留字(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(sizeof()是一个运算符)

1.return
return:结束一个函数并返回其后面表达式中的值。

初学的时候,有些不理解main 函数中return 0;有什么用,在写程序的时候老是忘记带上了。其实,带上return 0;是很有必要的。

main函数的返回值用于说明程序的退出状态,如果返回0,表示程序正常退出,否则表示程序异常退出。返回值传递给程序的激活者(操作系统)。

如果没有写return语句的话,c99(c语言标准)规定编译器自动在生成的目标文件中加入return 0;表示正常退出。

所以,为了代码规范,我们一般都必须带上return 0;
具体操作----- return (表达式);

其中,括号是可以省略的。一般不省略,如果返回值为表示式的时候容易造成混淆。
return返回值的类型:一般是函数定义的类型,如果return后表示式的值类型和函数值的类型不一致,则以函数函数类型为准,即:函数类型决定返回值类型。

需要注意的一点,也是易错的一点是:return不能返回指向局部变量的类型。----因为在函数结束时局部变量被自动销毁(上篇博客提及的局部变量的生存周期),则返回的指针为指向已释放的空间,再通过此指针进行操作就会产生错误。

//

int* test()
{int* p = NULL;int num = 5;p = #return p;
}int main()
{int *q = NULL;q = test();printf("%d\n",*q);return 0;
}

//输出结果为5,但是这样的代码是有隐患的。
我们再来看:

int* test()
{int* p = NULL;int num = 5;p = #return p;
}int test2()
{int x = 5, y = 6;return (x + y);
}
int main()
{    int *q = NULL;int k = 0;q = test();k=test2();printf("%d\n",*q);printf("%d\n",k);return 0;
}

在这里,多了个test2函数。发现结果并不是我们预料的5,11(p是一个不确定的值) 。p指向空间的数据不是之前num所赋值的5,这正印证了我们之前说过了,这样的返回存在隐患。在test函数调用完后,系统释放之前给num分配的空间,但是p指针仍然指向那块区域。在调用test2的时候,系统要为x,y分配空间。这时候就会把之前释放的那块空间给x,y再次分配使用,使用在赋值语句后,该空间的值发现了改变,使得p发生了改变。
所以,切记 return不能返回指向局部变量的类型。

2.void

void :void为空类型。void *为空类型指针。
其中,void a;是不允许的。每次定义一个变量,系统都会为其分配空间,而void类型无法确定,系统就不知道该为它分配多大的空间,显然是不合理的。
void *p;是允许的, 因为这是一个指针变量,系统都是默认分配四个字节的空间,至于具体指向的空间总存放的数据类型,就由用户自行操作。
并且,在操作的时候,要把该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的本质是变量,只是值不改变的变量而已。
所以,一般我们定义数组采用这样的操作:

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。

参考:https://blog.csdn.net/LaoJiuJun/article/details/98847954

C语言保留字(关键字)详解相关推荐

  1. 【老九学堂】【初识C语言】C语言保留字(关键字)详解

    保留字(reserved word) 保留字又称关键字. 指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用. 每种程序设计语言都规定了自己的一套保留字. 例如:BASIC语言规 ...

  2. C语言const关键字详解

    C语言的const关键字 const 在实际编程中用得并不多,const 是 constant 的缩写,意思是"恒定不变的"!它是定义只读变量的关键字,或者说 const 是定义常 ...

  3. C语言的关键字 详解

    一.C语言的关键字 C语言中的32个关键字及其意思如下: 由 ANSI 标准定义的C 语言关键字共32 个.根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类. 1.数据类型关键字 ...

  4. C语言volatile关键字详解

    volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储 ...

  5. MySQL查询语种关键字_SQL——SQL语言全部关键字详解

    http://blog.csdn.net/quinnnorris/article/details/71056445 数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就 ...

  6. c语言extern关键字详解

    在c语言中代码的执行顺序是从上往下执行的,如果定义的函数或者变量在调用之后,那么调用的时候编译就会找不到需要使用的变量.这样就会出现错误,如下代码: #include<stdio.h>in ...

  7. C++/C语言sizeof关键字详解

    目录 sizeof关键字 主要功能 常见用法 与基本数据类型的相关的内存空间大小的求解 与数组相关的内存空间大小的求解 在数组的定义处 在具体函数的中 运行实例 与指针的相关的变量所占内存空间大小的求 ...

  8. c语言关键字extern作用,c语言extern关键字详解

    标签: 在c语言中代码的执行顺序是从上往下执行的,如果定义的函数或者变量在调用之后,那么调用的时候编译就会找不到需要使用的变量.这样就会出现错误,如下代码: #include int main(){ ...

  9. c语言所有关键字作用,void_C语言void关键字详解

    void类型修饰符(type specifier)表示"没有值可以获得".因此,不可以采用这个类型声明变量或常量.void 类型可以用于下面各小节所描述的目的. void用于函数声 ...

最新文章

  1. 计算机检索技巧知识,初学者常用电脑技巧知识
  2. 怎样写APP计划书-20150313早读课
  3. SAP Spartacus里的feature module
  4. java刷机_java非智能手机能不能通过刷机安装一个安卓智能系统
  5. Python——腾讯笔试编程题(函数练习)
  6. 广搜,智能拼图(ZOJ1079)
  7. (1)非对称加密——RSA——史上最通俗的小白可看懂!
  8. Exception:A generic error occurred in GDI+
  9. zbar扫描无法近距离扫码_云值守:扫码购使用流程是怎样的?带来怎样的影响?...
  10. 求素数的三种方法(Java实现)
  11. linux 2.6 内核配置说明
  12. 系统设计时要考虑哪些方面?
  13. Day 23 What Drivers You Crazy
  14. 使用Mono.Cecil改变访问级别
  15. 电子宠物游戏(附C++源码)
  16. 软件开发人员的职业发展规划
  17. 分享一个自己写的可视化编程工具
  18. app自动化测试——app自动化控制、常见控件定位方法
  19. b mino为什么退出block_虚势爱豆!地下rapper!进YG不足半年就出道!WINNER的宋闵浩Mino...
  20. python全栈指的是什么_python全栈指的是什么

热门文章

  1. matlab薄板屈曲,薄板屈曲分析的局部Petrov-Galerkin方法
  2. CodeCombat中国官方介绍来啦!
  3. asp.net的运行环境
  4. File.listFiles()返回null
  5. 系统运维常踩的坑(一)
  6. java仓库库存清单_说仓库库存管理
  7. 【天善学院】自己动手,丰衣足食!Python3网络爬虫实战案例 附讲义与代码
  8. R语言使用epiDisplay包的tableStack函数基于分组变量生成统计分析表(包含描述性统计分析、假设检验、不同数据使用不同的统计量和假设检验方法)、自定义指定Bartlett检验的p值水平
  9. matlab求解拉普拉斯方程,急求用matlab编写解拉普拉斯方程的程序
  10. python --格式化时间转时间戳(互转)