【C语言】关键字详解
前言
提示:以下是本篇文章正文内容,下面案例可供参考
本文着重参考了这篇文章
C语言32个关键字详解
一、char
字符变量是用类型符char定义字符变量,char的主要作用就是声明字符型变量或函数。
char类型是个1字节,它的取值范围是[-128 , 127] (-2^7 — 2^7-1)。
1.定义字符串类型
#include <stdio.h>
int main()
{
char c[]="Hello,World!";
printf("%s\n",c);
printf("%c\n",c[0]);
printf("%c\n",c[1]);
system("pause");
return 0;
}
2.定义字符类型
#include <stdio.h>
int main()
{
char c = 'a';
char a;
printf("%d\n", c); // 打印字符c的ASCII值
printf("char的大小=%d\n", sizeof(a)); // 打印字符c的ASCII值
system("pause"); // 在Windows系统上暂停程序,等待用户按键继续
return 0;
}
二、short
类型名为 short int 或 short,声明短整型变量或函数。
short类型为2个字节,它的取值范围是[-32768 , 32767] (-2^15 — 2^15-1)。
#include <stdio.h>
int main()
{
short n=4;
short c;
printf("%d\n",n);
short m=40000;
printf("%d\n",m);
printf("short的大小%d\n",sizeof(c));
system("pause"); // 在Windows系统上暂停程序,等待用户按键继续
return 0;
}
三、int
int为基本整型,声明整型变量或函数 。
int类型为4个字节,它的取值范围是[-2147483648 , 2147483647] (-2^31 — 2^31-1)。
#include <stdio.h>
int main()
{
int c = 4;
int a;
printf("c的值%d\n", c); // 打印字符c的ASCII值
printf("int的大小%d\n", sizeof(a)); // 打印字符c的ASCII值
system("pause"); // 在Windows系统上暂停程序,等待用户按键继续
return 0;
}
四、long
1、长整型:long int
long int类型为4个字节。
它的取值范围是[-2147483648 , 2147483647] (-2^31 — 2^31-1)。
2、双长整型:long long int
long long int类型为8个字节。
它的取值范围是[-9223372036854775808 , 9223372036854775807] (-2^63 —
2^63-1)。
#include <stdio.h>
int main()
{
long int c;
long long int a;
printf("long int=%d\n", sizeof(c)); // 打印字符c的ASCII值
printf("long long int=%d\n", sizeof(a)); // 打印字符c的ASCII值
system("pause"); // 在Windows系统上暂停程序,等待用户按键继续
return 0;
}
五、signed
声明有符号类型变量或函数。
我们知道计算机只认识0和1,所以任何数据到1计算机的底层都会换成0,1,那负数怎么存储呢?肯定这个“-”号是无法存入内存的,怎么办?很好办,做个标记。把基本数据类型的最高位腾出来,用来存符号,同时约定如下:最高位如果是1,表明这个数是负数,其值为除最高位以外的剩余位的值添上这个“-”号;如果最高位是0,表明这个数是正数,其值为除最高位以外的剩余位的值。
六、unsigned
unsigned表示的是无符号数据类型,声明无符号类型变量或函数。
被unsigned修饰的变量,其取值范围一定是大于0的。
1、无符号整形 unsigned int 4字节 0 ~ 4294967295
2、无符号短整型 unsigned short int 2字节 0 ~ 65535
3、无符号长整形 unsigned long int 4字节 0 ~ 4294967295
4、无符号字符型 unsigned char 1字节 0 ~ 255
#include <stdio.h>
int main(){
unsigned int a = -11;
unsigned char b = -129;
printf("%u\n", a);
printf("%u\n", b);
return 0;
}
七、float
float类型也被叫做单精度浮点类型,声明浮点型变量或函数。
float类型为4个字节,它的数值取值范围为[-3.410^-38 ~ 3.410^38]
#include <stdio.h>
int main(){
float n=3.14;
float a;
printf("%f\n", n);
printf("float的大小=%d\n",sizeof(a));
return 0;
}
八、double
double类型也被叫做双精度浮点类型,声明浮点型变量或函数。
double类型为8个字节,它的取值范围为[-1.710^-308 ~ 1.710^308]
#include <stdio.h>
int main(){
double n=3.14;
double a;
printf("%lf\n", n);
printf("double的大小=%d\n",sizeof(a));
return 0;
}
补充内容:关于 %f 和 %lf 的使用
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。 其中: float,单精度浮点型,对应%f。
double,双精度浮点型,对应%lf。在用于输出时: float类型可以使用%lf格式 double类型如果使用了%f格式可能会导致输出错误。
在用于输入时: double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。
九、struct、union、enum
十、void
void类型修饰符(type specifier)表示“没有值可以获得”。因此,不可以采用这个类型声明变量或常量。
1.void用于函数声明,没有返回值的函数,其类型为 void。
#include <stdio.h>
void Add(int x,int y){
printf("%d\n", x + y);
}
int main(){
int gg = 11;
int jj = 24;
Add(gg,jj);
return 0;
}
2.void不能用来声明变量或常量
3.void是没有返回值的,在void函数里面不能使用return来返回数据。
十一、for
for表示的是一个循环语句,可以控制一个循环,并且在每一次循环时修改循环变量。在循环语句中for应该是最为灵活的,不仅可以用于循环次数已经确定的情况,而且还可以用于循环次数不确定而只给出循环结束条件的情况。
1.省略变量初始化
#include <stdio.h>
int main(){
int i = 0; //在for循环外面对变量进行赋值
for (; i < 10; i++){
printf("%d ", i);
}
return 0;
}
2.省略循环条件
#include <stdio.h>
int main(){
int i; //在for循环外面对变量进行赋值
for (i = 0; ; i++){
printf("%d ", i);
}
return 0;
}
3.省略变量更新
#include <stdio.h>
int main(){
int i; //在for循环外面对变量进行赋值
for (i = 0; i<10 ; ){
printf("%d ", i);
}
return 0;
}
4.三个都省略
#include <stdio.h>
int main(){
int i; //在for循环外面对变量进行赋值
for (; ; ){
printf("%d ", i);
}
return 0;
}
十二、do while
do…while是一个比较特殊的循环,因为在有些条件下,不论条件是否满足,循环过程必须至少执行一次。
注意:在使用do…while语句时,条件放在while关键字后面的括号中,最后必须加上一个分号。
#include <stdio.h>
int main(){
int n = 1;
int sum = 0;
do{
sum += n;
n++; //这里我们让n进行自加
} while (n <= 1);
printf("%d\n", sum); //用sum来计算总和
return 0;
}
十三、while
while循环语句首先检查一个条件,也就是括号中的表达式。当条件为真时,就执行紧跟其后的语句或者语句块。每执行一遍程序,都将回到while语句处,重新检验条件是否满足。如果一开始就不满足,则跳过循环体中的语句,直接执行后面程序代码。如果第一次检验时满足,那么在第一次或其后的循环过程中,必须得有使条件为假的操作,否则循环将无法终止。
#include <stdio.h>
int main(){
int n = 1;
int sum = 0;
while (n <= 1){
sum += n;
n++;
}
printf("%d\n", sum); //计算总和
return 0;
}
十四、break
break语句终止并跳出循环,继续执行后面的代码。
#include <stdio.h>
int main(){
while (1){
printf("blue");
break; //直接结束循环,就不会进入死循环
}
return 0;
}
十五、continue
在某些情况下,程序需要返回到循环头部继续执行,而不是像break那样跳出循环。
continue的主要作用就是结束本次循环。就是跳过循环体中尚未执行的部分,直接执行下一次循环的操作。
注意:continue语句和break语句的区别:continue语句只能结束本次循环,而不是终止整个循环的执行;break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
十五、if else
if…else语句。在if后的括号中判断表达式的结果,如果判断的结果为真,则执行紧跟if后语句块中的内容;如果判断的结果为假,则执行else语句后的语句块内容。也就是说,当if语句检验的条件为假时,就执行相应的else语句后面的语句或者语句块
十六、goto
goto语句为无条件转移语句,可以使程序立即跳转到函数内部任意一条可执行语句。goto关键字后面带一个标点符,该标点符是同一个函数中某条语句的符号。符号可以出现在任何可执行语句前面,并且以一个冒号“:”作为后缀
1.goto从上到下
#include <stdio.h>
int main(){
goto end;
printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
end:
printf("5\n");
printf("6\n");
printf("7\n");
return 0;
}
2.goto从下到上
#include <stdio.h>
int main(){ //这个代码会进入一个死循环
printf("1\n"); //到了goto永远往上执行,不会停止
printf("2\n");
printf("3\n");
printf("4\n");
end:
printf("5\n");
goto end;
printf("6\n");
printf("7\n");
return 0;
}
十七、switch case default
switch语句是多分支选择语句。
if语句只有两个分支供选择,而在实际问题中常需要用到多分支选择。在c语言中可以用switch语句直接处理多分支选择情况,将程序的代码可读性提高。switch后面括号中的表达式就是要进行判断的条件。在switch语句块中,使用case关键字表示检验条件符合的各种情况,其后的语句是相应的操作。其中还有一个default关键字,作用是如果没有符合条件的情况,那么执行default后面默认的情况语句。
#include <stdio.h>
int main(){
int day;
printf("请输入1-7:");
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
// break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default:
printf("你输入的有误!\n");
break;
}
return 0;
}
十八、return
return 0 代表程序正常退出,return 1代表程序异常退出。
使用return语句可以返回一个变量内的值或一个指针,也可用return0,表示返回为空。
return 代表调到函数外。
return 0代表函数正常终止。return 1代表函数非正常终止。
return 关键字的作用是返回程序流程的控制权。其副作用是返回一个值。
十九、auto
auto:在缺省情况下,编译器默认所有的变量都是auto的,所以autu关键字可以省略。
auto关键字用于定义一个局部变量为自动的,这意味着每次执行到定义该变量时,都会产生一个新的变量,并且对其重新初始化。声明自动变量,一般不使用
二十、extern
extern变量称为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。通常外部储存都用于声明在另一个转换单元中定义的变量。
一个工程是由多个c文件组成的。这些源代码文件会分别进行编译,然后链接成一个可执行的模块。把这样的一个程序作为一个工程进行管理,并且生成一个工程文件来记录所有包含源代码文件。
二十一、register
register:这个关键字请求编译器尽可能地将变量存在CPU内部寄存器中,而不是通过内存寻址访问以提高效率。注意是尽可能,不是绝对。可以想象,一个CPU的寄存器数量有限,也就那么几个或几十个,如果用户定义了很多很多register变量,那么即便把CPU“累死”也不可能全部把这些变量放人寄存器,可能轮也轮不到你。
二十二、static
二十三、typedef
typedef关键字用以给数据类型取别名(但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性)。
typedef其实就是一个含义:类型重命名
对一般类型进行重命名 。
对结构体类型进行重命名 。
对指针进行重命名 。
对复杂结构进行重命名。
1.对整形重命名
2.对数组重命名
3.对指针重命名
二十四、const
二十五、sizeof
siezof的主要作用就是计算数据类型长度
1.计算数据类型大小
#include<stdio.h>
int main(){
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
return 0;
}
2.计算数组大小
#include <stdio.h>
int main(){
int jj[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//int为4个字节
//我们定义了10个数
//所以10*4=40个字节
printf("%d\n", sizeof(jj));//40
//下面我们求的是数组的空间大小
printf("%d\n", sizeof(jj)/sizeof(jj[0]));//10
return 0;
}
二十六、volatile
volatile关键字和const一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问
二十七、参考资料
C语言实现窗体程序,DevC++ 窗体应用
Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.zip
Dev C++下载安装和使用教程(新手必看)
static和const的作用与区别
总结
本文仅仅简单介绍了【C语言】关键字详解,评论区欢迎讨论。