C语言常见关键字

目录

前言

关键字:

auto

signed、unsigned

sizeof

char

short

int

long

float

double

struct

​编辑union(共用体)

struct和union的区别:

enum

typedef

switch、case、default、break

if语句

goto语句

while、do…while、for、continue、break

return

extern

 static

register

 后语


前言

这里只是对于一些C语言常见关键字的一些用法的演示或者比较简单的含义,当你看完这个之后,对于C语言常见的关键字的作用和用法肯定有所理解。如果有任何问题欢迎各位在下方或者私信交流。

想知道更多的细节可以去访问这个==》cppreference.com

本文所用到的代码集合==》C 语言关键字


关键字:

  • C语言自己预留的特殊符号,有特殊的意义。
  • 关键字不能自己创造,也不能做变量名。

auto

auto声明为自动变量 函数内部定义使用的变量

个人理解:可以把它理解成局部变量的作用域,随着{的创建而自动生成,随着}而消失

int main()
{//auto int a =10; 
	int a = 10;//a局部变量出了{}自动销毁 进出{}自动创建-->自动变量 前面会有个auto省略掉了
	return 0;
}

signed、unsigned

signed:有符号类型的整数类型

  • 使用在整数类型的前面
  • 在整数类型的时候默认有符号,所以一般来说使用的频率不高。
  • 有符号就代表着其有正负之分。
    int main()
    {
    	signed int a = 10;
    	signed long b = 10;
    	signed short c = 10;
    	return 0;
    }

unsigned:无符号类型的整数类型

  • 使用在整数类型的前面
  • 在整数类型前面用unsigned的时候,表示其只有正数
int main()
{
	unsigned int a = 1;
	unsigned long b = 1;
	unsigned short c = 1;
	return 0;
}

总结:

  • signed是默认的 ,表示这个变量是有符号的, 所以是可以存储整数和负数。
  • unsigned需要给出,表示这个变量没有符号值能存储数的大小,而不能表示正负。
  • signed存储符号是有代价的,代价就是存储空间中的一个比特位,专门用来存储符号,这一位不能表示数值。
  • 一般来说 ,同类型的signed能够存储的数的绝对值大小要小于unsigned。

sizeof

sizeof是操作符,计算变量/类型/数组所占空间的大小 单位是字节(byte)

int main()//sizeof
{
	int a = 4;
	int arr[] = { 1,2,3,4,5,6 };//数组类型里的每个元素是int
	printf("%d\n", sizeof(a));//4
	printf("%d\n", sizeof(char));//1
	printf("%d\n", sizeof(int));//4
	printf("%d\n", sizeof(arr));//24
	return 0;
}

arr因为是数组,里面有6个元素,然后6有个元素的类型是int==》6×4=24.

char

char是C语言的基本数据类型——字符型。大小是一个字节。

注意:

  • 字符是以ASCII码存在内存里面的。

范围:

  • signed char: -2^7  ~  2^7 - 1 
  • unsigned char : 0 ~ 2^8 - 1
int main()
{
	char a = 'A';
	printf("%d\n", sizeof(char));//1
	printf("%c", a);//A
}

short

short是C语言的基本数据类型——短整型。大小是两个字节。

注意:赋值的时候记得不要超过short的大小。

范围:

  • signed:-32768~+32767
  • unsigned :0~65535
int main()
{
	short a = 10;
	printf("%d\n", sizeof(short));//2
	a = 32768;
	printf("%d\n", a);//-32786
	unsigned short b = 65538;
	printf("%d", b);//2
}//并没有正确打印出来

int

int是是C语言的基本数据类型——整型,大小是四个字节

注意:赋值的时候记得不要超过int的大小。

范围:

  • signed:-2,147,483,648~2,147,483,647
  • unsigned:0~4,294,967,295
int main()
{
	int a = 10;
	printf("%d\n", sizeof(int));//4
	printf("%d\n", a);//10
	 a = 1000000000000;
	printf("%d", a);//-727379968 超过其范围
	return 0;
}

long

long是是C语言的基本数据类型——长整型,大小是四个字节(有的编辑器可能是8个字节)

注意:赋值的时候记得不要超过long的大小。long在C语言规定里是起码大于int,long>=int。

范围:

  •  signed:-2,147,483,648~2,147,483,647
  • unsigned:0~4,294,967,295
int main()
{
	long a = 10;
	printf("%d\n", sizeof(long));//4
	printf("%d\n", a);//10
	a = 1000000000000;
	printf("%d", a);//-727379968 超过其范围
	return 0;
}

float

float是是C语言的基本数据类型——单精度浮点数(小数),大小是四个字节。

范围:-3.4x10^-38 ~ 3.4x10^38 

注:float和double不存在unsigend。

int main()
{
	float a = 1.1;
	printf("%f\n", a);//1.100000
	printf("%d", sizeof(float));//4
	return 0;
}

double

double是是C语言的基本数据类型——双精度浮点数(小数),大小是八个字节。

范围:-1.7x10^308 ~ 1.7x10^308

注:float和double不存在unsigend。

int main()
{
	float a = 12.1;
	printf("%lf\n", a);//12.100000
	printf("%d", sizeof(double));//8
	return 0;
}

struct

  • struct是结构体关键字。
  • 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
    struct tag struct:结构体关键字 tag:标签
    {//例如
        char name[20];
        char tele[12];
        //成员变量 变量列表
    }variable - list;//成员列表  PS:这里;不能掉
    struct student
    {
    	char SEX[20];
    	char NAME[20];
    	int year;
    }A;
    
    int main()
    {
    	struct student A = { "男","hunter",21 };
    	printf("%s\n", A.SEX);//男
    	printf("%s\n", A.NAME);//hunter
    	printf("%d", A.year);//21
    	return 0;
    }

    union(共用体)

  • 定义:联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
  • 特点:联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
union Un
{
	char c;
	int i;
};

int main()
{
	union Un u;
	printf("%d\n", sizeof(u));//4
	printf("%p\n", &u);//00000034F18FFA94
	printf("%p\n", &(u.c));//00000034F18FFA94
	printf("%p\n", &(u.i));//00000034F18FFA94
	return 0;
}

struct和union的区别:

  • struct:内存空间是所有结构体成员,内存空间是等于所有成员长度的和。
  • union:所有成员共用一块内存空间,成员不能同时占用内存空间,内存空间长度是最长成员长度。

enum

PS:对于enum本人对其的理解不深,怕误人子弟就不给各位写文字内容了,就贴上代码形式,感兴趣各位老铁自行搜索。

enum Sex
{
	//枚举的可能取值-常量
	MALE, //0
	FEMALE, //1
	SECRET,//2  没有赋值的情况默认从0开始
};


int main()
{
	enum Sex s = MALE;
	printf("%d", s);//0
	return 0;
}

typedef

typedef类型定义-类型重定义 相当于起别名。

例如:你的大名叫张三,你也有小名:狗蛋。张三和狗蛋指的是一个人。

下面给int起了个“小名”——>I。

int main()//typedef
{ 
	typedef int I;	
	I num = 20;
	printf("%d", num);//20  正常输出
	return 0;
}

switch、case、default、break

语法结构:

switch (整形表达式)
{									
    //case 整形表达式:
    语句项;
}
  • switch:是选择语句。
  • case:是看着switch旁边()的整形表达式的结果进行选择的,只有对上了case的序号,case后面的语句才会实现,如果没有case匹配的上且没有default,句子就会直接跳出switch语句,执行switch后面的语句。(case语句后面的序号可以随便写,可以不用按照顺序)
  • default:当switch的判断条件没有一个匹配case,就会触发。
  • break:用在switch语句和循环语句(for、while、do……while)里面,用于跳出switch语句和循环语句。如果匹配上了case,且当前case语句没有break句子就会顺着往下面执行,直到没有case语句或者在后面的case语句里面碰到了break。
int main()//switch语句 
{//如果都是相同类case内容 相同的就可以删除printf、break,直至最后一个 
	int day = 0;
	scanf("%d", &day);
	switch (day)// switch(整型表达式)
	{//case 是入口 break是出口
	case 1:
		printf("1\n");
		break;
	case 2:
		printf("2\n");
		break;
	case 3:
		printf("3\n");
		break;
	case 4:
		printf("4\n");
		break;
	default://输入的常量 前面都未匹配上就会到default default和case没有严格的顺序控制
		printf("输入错误\n");
	}
	return 0;
}

if语句

注意:

  • if语句后面不能有 ;(分号),否则后面的if语句后面表达式不管是为真还是为假都会执行。
  • 如果表达式结果为真,则语句执行(0为假,一切非0为真)
  • if和else如果要控制多条语句要用{}括起来
  • 没有执行成功的if后面一行的代码都不会被执行
  • else和里的最近的未匹配的if相匹配

语法结构:

if (表达式)
语句;
//--------------
if (表达式)
语句1;
else
语句2;
//-----------
//多分支    
if (表达式1)
语句1;
else if (表达式2)
语句2;
else
语句3;
int main()
{// 例 int a = 9; (10<=a<28)-->(10<=9<28)-->(9不是<10,为假为0)(0<28)-->成立选择
	int age = 140;
	if (age >= 18 && age < 28)
		printf("青年\n");
	else
	{
		if (age >= 28 && age < 60)
			printf("壮年\n");
		else if (age >= 60 && age < 80)
			printf("老年\n");
		else
			printf("高人\n");
	}
	return 0;
}

int main()
{//else和里的最近的未匹配的if相匹配
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	return 0;//结果啥也没有 上面a=0 a==1 不匹配,直接就不进入
}// 如果想让与之匹配 就在if(a==1){}给个大括号else

goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。

例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

PS:下面代码慎用。执行到goto语句这里会跳转到again:处。

int main()//goto语句
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就取消关机:>\n");
	printf("请输入:>");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

while、do…while、for、continue、break

  • break其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 
  • continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到语句的判断部分。进行下一次循环的入口判断。
  • break和continue循环语句(while、do…while、for)都适用,效果也都一样
  • break也能用于switch语句中,continue不能用于switch语句中

while语法结构与规则:注意要写跳出程序的功能,不然容易死循环。

while (表达式)
{
	循环语句;
}
int main()
{
	int a = 1;
	while (a <= 10)
	{//打印1-10的数字
		if (a == 5)
			//break;//这边停止 1 2 3 4 
			continue;//终止本次循环后面的代码不在执行 直接进入到while循环的判断部分
		printf("%d\n", a);//1 2 3 4 _ 这边一直有光标在闪 在a++;a=5后while成立,进入if判断相等,就会continue直接while a=5
		a++;
	}
	return 0;
}

do…while语法结构与规则: 代码至少执行一遍,然后再进入while表达式进行判断,注意要写跳出程序的功能

do
{
	循环语句;
} while (表达式);
int main()// do ...while 循环 
{
	int i = 1;
	do
	{
		if (i == 5)
			//break;
			continue;//跟while情况类似
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

for语法结构与规则

  • 表达式1为初始化部分,用于初始化循环变量的。
  • 表达式2为条件判断部分,用于判断循环时候终止。
  • 表达式3为调整部分,用于循环条件的调整。

执行顺序:exp1->exp2->循环语句->exp3

for(表达式1; 表达式2; 表达式3)   
     循环语句;
int main()//for循环 打印1-10的数字
{
	int i = 0;
	//初始化; 判断  ; 调整
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}	

return

return语法格式与规则:

  • return 语句可以有多个,可以出现在函数体的任意位置,但是每次调用函数只能有一个 return 语句被执行,所以只有一个返回值。
  • 函数一旦遇到 return 语句就立即返回,后面的所有语句都不会被执行到了。
return 表达式;
或者:
return (表达式);
int Max(int a, int b)
{
	if (a > b)
		return a;
	else
		return b;
}
int main()
{
	int MAX=0, b=20, a = 10;
	 MAX= Max(a, b);
	 printf("%d", MAX);//20
	return 0;
}

extern

 static

  • static 修饰局部变量增加声明周期 修饰全局变量 减少作用域
  • 修饰全局变量 减少作用域 让静态的全局变量只能在自己所在的源文件内部使用 出了源文件则无法使用。
  • 修饰函数 改变了函数的链接属性(改变为内部链接属性)  函数有外部链接属性  
static int Add(int x, int y)
{
	int z = x + y;
	return z;
}//在另外一个新的.C文件的代码

extern int Add(int, int);
int main()
{
	int a = 10;
	int b = 20;
	int sum = 0;
	sum = Add(a, b);
	printf("sum=%d\n", sum);
	return 0;
}

static int g_val = 2020;
int main()//static 改变全局变量的作用域  减少
{//extern 声明外部符号的 
	extern int g_val;
	printf("%d\n", g_val);
	return 0;
}

void test()
{
	static int a = 1;
	a++;
	printf("a=%d\n", a);
}

int main()//static 修饰局部变量 
{//static局部变量的生命周期便长
	int i = 0;
	while (i < 5)
	{
		test();
		i++;
	}
	return 0;
}

register

register: 寄存器变量 寄存器的读写速度高于内存 用经常使用的变量给定义

int main()
{
	register int a = 10;//建议把a定义成寄存器变量 最终的决定权还是在编译器手中
	printf("%d", a);
	return 0;
}

 后语

希望这篇文章对各位有所帮助,能对C语言的关键字有所认识。如果可以的话,希望各位老铁多点点赞,给给鼓励,咱们下篇文章见。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值