C语言的关键字及其部分关键词详细用法
1.总述
关键词是由C语言规定的具有特定意义的字符串,通常也称为保留字,用户定义的标识符不应与关键词相同,C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类,具体如以下表格中显示:
类型 | 关键词 | 简要说明 |
数据类型关键字 | char | 声明字符型变量或函数 |
double | 声明双精度变量或函数 | |
enum | 声明枚举类型 | |
float | 声明浮点型变量或函数 | |
int | 声明整型变量或函数 | |
long | 声明长整型变量或函数 | |
short | 声明短整型变量或函数 | |
signed | 声明有符号类型变量或函数 | |
struct | 声明结构体变量或函数 | |
union | 声明共用体数据类型 | |
unsigned | 声明无符号类型变量或函数 | |
void | 声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) | |
控制语句关键字 | for | 一种循环语句(循环语句关键词) |
do | 循环语句的循环体(循环语句关键词) | |
while | 循环语句的循环条件(循环语句关键词) | |
break | 跳出当前循环(循环语句关键词) | |
continue | 结束当前循环,开始下一轮循环(循环语句关键词) | |
if | 条件语句分支(条件语句关键词) | |
else | 条件语句否定分支(条件语句关键词) | |
goto | 无条件跳转语句(条件语句关键词) | |
switch | 用于开关语句(开关语句) | |
case | 开关语句分支(开关语句) | |
default | 开关语句中的“其他”分支(开关语句) | |
return | 子程序返回语句(返回语句) | |
存储类型关键字 | auto | 声明自动变量(一般不使用) |
extern | 声明变量是在其他文件正声明(也可以看做是引用变量) | |
register | 声明寄存器变量 | |
static | 声明静态变量 | |
其它关键字 | const | 声明常类型,常类型的变量或对象的值是不能被更新的,可使用在常量定义,指针定义,函数定义等处,与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) |
sizeof | 用于计算特定类型或特定类型变量的数据类型长度 | |
typedef | 常规变量类型定义,数据类型取别名,指针类型定义,函数地址说明,函数声明,函数指针定义等 | |
volatile | 说明变量在程序执行中可被隐含地改变 说明变量在程序执行中可被隐含地改变,与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值 |
2.部分关键词进一步说明
下面针对enum,static,union,extern,const,typedef,volatile这几个关键词做出较为详细的说明:
2.1 enum
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量DAY1,DAY2,DAY3被说明为上述的DAY,可采用下述任一种方式:
enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY };
enum weekday DAY1,DAY2,DAY3;
或者为:
enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;
或者为:
enum { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;
例:
#include <stdio.h>
int main()
{enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;DAY1=SUNDAY;DAY2=MONDAY;DAY3=TUESDAY;printf("%d,%d,%d\n",DAY1,DAY2,DAY3);DAY1=(enum DAY)2;printf("%d,%d,%d\n",DAY1,DAY2,DAY3);
}
输出结果:
0,1,2
2,1,2
注:
枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值;
枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在DAY中,SUNDAY值为0,MONDAY值为1,…,SATURDAY值为6;
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量;
如一定要把数值赋予枚举变量,则必须用强制类型转换;
枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号;
例:
#include <stdio.h>
int main()
{enum DAY { SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY } DAY1,DAY2,DAY3;DAY1=SUNDAY;//正确,能把枚举值赋予枚举变量DAY2=MONDAY;//正确,能把枚举值赋予枚举变量DAY3=TUESDAY;//正确,能把枚举值赋予枚举变量DAY1=(enum DAY)0;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为0的枚举元素赋予枚举变量DAY1DAY2=(enum DAY)1;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为1的枚举元素赋予枚举变量DAY2DAY3=(enum DAY)2;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为2的枚举元素赋予枚举变量DAY3/*对于DAY1=0;DAY2=1;DAY3=2;的编译在ubuntu的编译器下可以通过且可以把相应的值赋给相应变量,但是在VC下编译报错*/DAY1=0;//错误,不能把元素的数值直接赋予枚举变量DAY2=1;//错误,不能把元素的数值直接赋予枚举变量DAY3=2;//错误,不能把元素的数值直接赋予枚举变量SUNDAY=5;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值MONDAY=6;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值return 0;
}
//正确,能把枚举值赋予枚举变量DAY2=MONDAY;//正确,能把枚举值赋予枚举变量DAY3=TUESDAY;//正确,能把枚举值赋予枚举变量DAY1=(enum DAY)0;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为0的枚举元素赋予枚举变量DAY1DAY2=(enum DAY)1;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为1的枚举元素赋予枚举变量DAY2DAY3=(enum DAY)2;//正确,如一定要把数值赋予枚举变量,则必须用强制类型转换,其意义是将顺序号为2的枚举元素赋予枚举变量DAY3/*对于DAY1=0;DAY2=1;DAY3=2;的编译在ubuntu的编译器下可以通过且可以把相应的值赋给相应变量,但是在VC下编译报错*/DAY1=0;//错误,不能把元素的数值直接赋予枚举变量DAY2=1;//错误,不能把元素的数值直接赋予枚举变量DAY3=2;//错误,不能把元素的数值直接赋予枚举变量SUNDAY=5;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值MONDAY=6;//错误,枚举值是常量,不是变量,不能在程序中用赋值语句再对它赋值return 0;
}
注:枚举值的常量值在没有被赋值的情况下,系统默认给它的第一个值赋0,后面的依次为1,2,3;不过也可以直接指定某个或者某些枚举值的数值,比如说,星期日对应0对中国人来说不好接受,那么我们这样定义: enum DAY { MONDAY=1,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY } ;这样的话,TUESDAY就将等于2,直接到SUNDAY等于7. 另:枚举类型定义规定,默认低一些枚举成员值为0,后一项枚举成员的值自动取前一项的枚举成员的值加1,在实际应用中,第一项的值不一定为0,所有的枚举变量也不一定是连续的,这时就需要显示赋值。 另:枚举赋值时不可以有重复,否则会报错;尽量从小到大排列,虽然乱序编译不会报错,但是会影响阅读和维护。
例:
TEST
{TEST1=1, //从1开始,而不是0TEST2, //默认加1,所以TEST2为2TEST10=10,//出现不连续,TEST10是10TEST11 //上一个值加一得到TEST11是11
}
2.2 static
【C/C++】复习关键字static
C++中类的static成员变量和static成员函数
2.3 typedef
C语言typedef的用法详解
typedef 可以给数组、指针、结构体等类型定义别名。来看一个给数组类型定义别名的例子:
typedef char ARRAY20[20];
表示 ARRAY20 是类型char[20]的别名。它是一个长度为20的数组类型。接着可以用ARRAY20定义数组:
ARRAY20 a1, a2, s1, s2;
它等价于:
char a1[20], a2[20], s1[20], s2[20];
注意,数组也是有类型的。例如char a1[20];定义了一个数组 a1,它的类型就是 char [20]。
2.4 SWITCH
switch statement (C++)
C语言的关键字及其部分关键词详细用法相关推荐
- c语言ofstream,C++ ofstream跟ifstream详细用法以及C语言的file用法
C++ ofstream和ifstream详细用法以及C语言的file用法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个strea ...
- c语言volatile关键字(详细)总结附示例讲解
目录 一.简介 二.示例代码解析 2.1 修饰变量 2.2 修饰硬件寄存器地址 三.其他相关链接 一.简介 volatile属于C语言的关键字.开发者告诉编译器该变量是易变的,无非就是希望编译器去注意 ...
- C语言程序设计——结构体的运用 完成对输入的字符串中C关键词的查找统计。程序运行示例如下:本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入:
完成对输入的字符串中C关键词的查找统计. 程序运行示例如下: 本程序将为您统计C语言的关键字的个数,请输入,输入end结束输入: if do while while do break goto hel ...
- Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...
- __declspec关键字详细用法
__declspec关键字详细用法 2009-01-21 16:23 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与ext ...
- 对C语言的关键字及部分关键字用法的简单理解
小盆友,你是否有很多问号??? C语言的关键字是什么?有哪些?他们如何用??? 我也在学习中迷惑着,所以把今天学习到的稍微做一下总结,方便自己以后的复习(目前学到的比较粗浅,以后还需要深入学习). 哪 ...
- C语言基础入门笔记(超详细笔记,多出进行更新,将近九千字)
下载VS2013,我们一起学习. #include 包含一个叫stdio.h的文件,文件包含令,预处理指令. stdio.h C语言的标准I/O库,用于读取和写入文件,也用于控制台的输入和输出. ma ...
- Java语言的关键字
Abstract 抽象的 一个Java语言中的关键字,用在类的声明中来指明一个类是不能被实例化的,但是可以被其它类继承.一个抽象类可以使用抽象方法,抽象方法不需要实现,但是需要在子类中被实现 brea ...
- 返回语句C语言return关键字
时间紧张,先记一笔,后续优化与完善. C语言return关键字 return 用来终止一个函数并返回其前面跟着的值,绝对很简单. return (Val)://此括号可以省略.但一般不省略,尤其在返回 ...
最新文章
- 微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
- 全球及中国液压磁路保护器行业发展规划与产销需求预测报告2022版
- 【要闻】Kubernetes安全问题严峻、Linux v5.4安全性浅谈
- 云网络的守护神:主动链路监控
- Redis 的 应用问题
- Linux 下源代码阅读工具 —— vim + TagList + CTags
- 工作计划进度甘特图.xlsx
- Watir vs Selenium
- Windows下使用c++编译hiredis.lib,Win32_Interop.lib
- 控制台中画一个正方体
- android 缺半圆形头像,圆形头像设计
- c语言搭积木游戏,我们一起搭积木,做游戏,就这就简单
- hive中的distribute by
- 进销存软件的价值是多少?它能帮企业做什么?
- BC渗透的常见切入点(总结)
- 超好玩的mac模拟经营游戏:巨型水族馆中文版
- Android模拟器检测体系梳理,android驱动开发入门
- 【论文总结】Lip Reading Sentences in the Wild(唇语识别)
- 4. Java并发编程-管程
- 【动态规划DP】弹簧板
热门文章
- XMLGregorianCalendar 保留年月日格式
- JS小型游戏框架coquette学习(持续更新)
- 抢注商标是蹭热点还是“不要脸”?
- docker运行yyets_你应该知道的5个开源Docker工具...
- 如何写软文才能达到预期的效果
- JS关于canvas画布小笔记
- canal简介及canal部署、原理和使用介绍
- C语言里struct和union的区别
- 使用jmail发送短信
- PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署