(C语言)32个关键字

概要

数据类型关键字(12)

char : 声明字符型变量或函数
short : 声明短整型变量或函数
int : 声明整型变量或函数
long : 声明长整型变量或函数
signed : 声明有符号类型变量或函数
unsigned : 声明无符号类型变量或函数
float : 声明浮点型变量或函数
double : 声明双精度变量或函数
struct : 声明结构体变量或函数
union : 声明共用体(联合体)数据类型
enum : 声明枚举类型
void : 声明函数无返回值或无参数,声明无类型指针

控制语句关键字(12)

1. 循环控制(5个)

for : 一种循环语句
do : 循环语句的循环体
while : 循环语句的循环条件
break : 跳出当前循环
continue : 结束当前循环,开始下一轮循环

2. 条件语句(3个)

if : 条件语句
else : 条件语句否定分支
goto : 无条件跳转语句

3. 开关语句 (3个)

switch :  用于开关语句
case : 开关语句分支
default : 开关语句中的 其他 分支

4. 返回语句(1个)

return : 函数返回语句 ( 可以带参数,也看不带参数 )

存储类型关键字(5个)

在一个变量定义的时候只能有一个存储类型的关键字出现。
auto : 声明自动变量,一般不使用
extern : 声明变量是在其他文件中声明
register : 声明寄存器变量
static : 声明静态变量
typedef : 用以给数据类型取别名 ( 但是该关键字被分到存储关键字分类中,虽然看起来没什么相关性 )

其他关键字(3个)

const : 声明只读变量
sizeof : 计算数据类型长度
volatile : 说明变量在程序执行中可被隐含地改变

主要内容:

1.register(建议性)修饰变量,尽量将所修饰变量放入CPU寄存器中,从而达到提升效率的目的。

使用建议:①局部变量。②不会被写入的变量。③高频被读取的变量(比如用于while(date),循环判断条件)。④寄存器数量有限,不要大量使用。⑤register修饰的变量不建议取地址(地址是内存的概念)。

2.auto:一般局部变量默认为auto修饰。

3.static修饰全局变量和函数,使它们只能在本文件中使用,不能被外部文件直接访问为项目维护提供了安全保证。修饰局部变量,改变了局部变量的生命周期(本质是将局部变量存储在静态区)。

4.sizeof:不是函数,是操作符关键字,用于确定一种类型对应开辟空间的大小。

5.signed:有符号字符型。unsigned:无符号字符型。                                                                ①.数据的存储:unsigned int a=-10; 这是没有问题的。空间不关心内容,单纯的数据没有意义,变量类型在读取的时候才有意义,类型决定了如何解释空间内部保存的二进制序列。②大端存储:按字节为单位,数据高权值位存储在低地址处;小端存储:按字节为单位,数据高权值位存储在高地址处。 ③二进制转十进制:1->2^0 , 10->2^1 , 100->2^2 , 1000->2^3 。④unsigned int b = 10u,保持等号两端数据类新一致。(10u : unsigned int ; 10 : int )

6.if: if(!flag)推荐写法,直观反映flag是"bool"。①if语句,先执行()中的表达式或者函数,得到真假结果。②条件判定功能。③进行,分支功能。④if else  联用,遵循就近原则。

7.float、double:浮点数在进行比较的时候,绝对不能直接使用==进行比较,因为浮点数本身有精度损失,进而导致各种结果可能有细微的差别。if(x==y) =>  if(fabs(x-y)<DBL_EPSILON);    if(x==0.0) =>  if(fabs(x)<DBL_EPSILON);

8.NULL:0 ‘\0’ "NULL" 的类型不同,数值都为0。

9.switch&&case&&break&&default:①switch语法结构中,case完成的判定功能,break完成的分支功能,default处理异常情况。②case后面不能跟变量或者常变量,也不能定义变量,一定需要的话,可以加{}或者封装为函数。③default:可以出现在任何地方,推荐放在最后面。

10.while&&do{}while;&&for:①循环条件初始化。②循环条件判定。③循环条件更新。死循环:while(1);for(;;);do{}while(1);

11.break:跳出循环。continue:结束本次(一次)循环,while与do while 跳转到条件判断,for跳转到条件更新处。两循环嵌套,最好将循环次数多的放在里面,for循环最好前闭后开,便于循环次数统计。

12.goto:遇到 goto end;  跳转到 end: 处(end为标记位,自己定义名字,goto语句不能跨代码块使用)。

13.void:void 不能定义变量,因为void本身被编译器解释为空类型,强制的不允许定义变量。但可以定义指针,因为指针大小是明确的,VS2019中:sizeof(void)  0 字节,Linux 中,sizeof(void)  为1字节,所以void * p,VS中不能进行p++等操作,而Linux中可以。C语言可以不带返回值,默认返回值为int。void *p 不能直接解引用,它能被任意类型的指针接收,也可以接受任意类型的指针(常用)。

14.return:函数的返回值通过寄存器(eax)的方式返回给函数调用方,函数的返回值具有常属性。main 函数return 0的原因:声明的main函数是有返回值的话,那么就必须返回一个给定类型的值。比如int main() 就需要返回一个int类型的值,通常用0,因为操作系统的习惯是认为返回0是正常退出。

15.const:修饰的变量具有只读属性,不可直接修改,可以通过指针方式间接修改。作用(于编译阶段):①让编译器进行直接修改式检查。②告诉其他程序员,后面不要直接修改,也属于一种“自描述”。const修饰指针(关键字不能修饰关键字):①const int *p = &a(int const *p = &a),const修饰 * ,p指向的变量,a不能直接被修改。② int * const p = &a,const修饰 p,p的内容不能直接修改,即p的指向不能变。const修饰函数返回值(返回指针)。

16.volatile:多用于并发场景,保持内存可见性。不希望被编译器优化,达到稳定访问内存的目的。const(不要进行直接写入) volatile(读取时每次都要往内存读) int a=100;

17.struct:定义结构体其实就是在制作类型。柔性数组如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>

//#define NUM 64
//
//struct stu {
//	char name[NUM / 2];
//	int age;
//	char sex;
//	char addr[NUM];
//}*p,x;
//
//void test(struct stu* p)
//{
//	printf("%s\n", p->name);
//	printf("%d\n", p->age);
//	printf("%c\n", p->sex);
//	printf("%s\n", p->addr);
//}
//
//int main()
//{
//	strcpy(x.name, "zhangsan");
//	x.age = 10;
//
//	p = &x;
//
//	p->sex = 'w';
//	strcpy(p->addr, "地球");
//	test(p);
//
//	return 0;
//}

struct date {
	int num;
	int arr[0];
};


int main()
{
	struct date* p = malloc(sizeof(struct date) + 10 * sizeof(int));
	p->num = 10;
	for (int i = 0; i < p->num; i++)
	{
		p->arr[i] = i;
		printf("%d\n", p->arr[i]);
	}
	free(p);
}

18.union:联合体,联合体内所有成员的起始地址都是一样的,每一个都是第一个元素。联合体的大小必须能够整除所有成员的大小。

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>

union un {
	int a;
	char b;
}*p,x;

void test(union un* p)
{
	if (1 == (p->b))
	{
		printf("%s\n", "小端");
	}
	else
	{
		printf("%s\n", "大端");
	}
 
}

int main()
{
	x.a = 1;
	p = &x;
	test(p);

}

19.enum:具有代码的自描述性,列举出具有相关性的常量,可以分段设置常量。

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>

enum color {
	RED,
	BLUE,
	GREEN=5,
	BLACK,
	YELLOW=100
};

int main()
{
	enum color c = RED;
	printf("%d\n", RED);
	printf("%d\n", BLUE);
	printf("%d\n", GREEN);
	printf("%d\n", BLACK);
	printf("%d\n", YELLOW);
	return 0;
}

20.trypedf:类型重命名。(推荐在结构体上使用)

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>

typedef unsigned int u_int;
typedef int* int_p;

typedef struct stu {
	char name[20];
	int age;
	char sex;
}t_stu;

void test(t_stu* p)
{
	printf("%s\n", p->name);
	printf("%d\n", p->age);
	printf("%c\n", p->sex);
}

int main()
{ 
	unsigned int a = 10;

	u_int y = a;
	int_p p = &a;
	t_stu x = { "zhangshan",y,'w' };
	test(&x);
	return 0;
}

扩展:

1.C语言中一共有32个关键字(C89 C90),C99标准有32+5个。

2.在Win中,双击的本质是运行程序,将程序加载到内存中。任何程序在被运行之前都必须被加载到内存中。

3.摩尔定律是英特尔创始人之一戈登·摩尔的经验之谈,其核心内容为:集成电路上可以容纳的晶体管数目在大约每经过18个月便会增加一倍。

4.所有变量在声明时不能设置初始值。

5.解决头文件重复包含的一种方法:#pragma once。 .h头文件的作用:便于项目组织,降低维护成本。

6.C语言中为何要有数据类型:对内存进行合理划分,按需索取。

7.局部变量不做初始化,内容为随机值。

8.命名规则:①见名知意。②大小驼峰。③数字字母下划线。

9.计算机内存储的整形必须是补码,有符号正数和无符号数的原反补码相同,有符号且为负数:原码->(最高位为符号位1不变,其余按位取反)反码->(反码+1,符号位也要参加运算)补码;补码取反再+1,可得到原码。

10.为什么计算机中存储补码:cpu所有计算全部能转换为加法依赖于补码,使得cpu的硬件电路只需要设计一套就够了。

11.C中,0为假,非0为真,C语言中C89,C90标准没有bool类型,C99中有-Bool,在头文件<stdbool.h>中使用宏的方式定义了bool。bool x=ture/false

12.强制类型转换:不改变内存中的数据,只改变对应的类型。真实转换:会改变内存中的数据。

13.任何C程序在默认编译好之后,运行时都会打开三个输入输出流,stdin:标准输入,FILE*stdin,键盘。stdout:标准输出,FILE*stdout,显示器。stderr:标准错误,FILE*stderr;显示器。键盘输入的内容或者往显示器中打印的内容都是字符。

14.C语言中有字符串,但没有字符串类型。

15.计算机中清空数据,只需要设置该数据无效即可。调用函数形成栈帧,函数返回栈帧结构被释放。(其中数据会被覆盖)临时函数具有临时性的原因:临时变量存放于栈帧之中。

16.指针就是地址,指针变量用于存放地址。地址(指针)的作用:提高查找定位效率。任何一个变量,在不同的应用场景中,代表不同的含义。int x;x=100,左值,代表x的空间,变量的属性。int y=x;右值,代表x的内容,数据的属性。

17.C中,任何函数参数都会形成临时变量,包括指针变量。限定不严格的变量可以赋值给限定严格的变量,反之则不行。

18.取地址操作取的是最低地址,在C中任何变量都是低地址开始(字节序),对指针进行解引用,即为指针所指向的目标(类型相同)。

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言是一种很受欢迎的编程语言,它使用32关键字来控制程序结构和执行过程。这些关键字不同于普通变量名或函数名,具有特殊的语法意义,因此翻译这些关键字非常重要。下面是这些关键字的翻译图: 自动(auto):用于声明自动变量,通常在函数中使用。 双精度(double):用于声明双精度浮点数型变量。 打破(break):用于中断当前循环或switch语句。 案例(case):用于定义switch语句中的分支。 字符(char):用于声明字符型变量。 连续(continue):用于跳过当前循环的余下部分。 默认(default):用于定义switch语句中的默认分支。 执行(do):用于定义do-while循环。 双次(else):用于定义if语句中执行非if分支的情况。 枚举(enum):用于定义枚举类型。 外部(extern):用于声明外部变量或函数。 浮点(float):用于声明浮点型变量。 为(for):用于定义for循环。 去(goto):用于跳转到程序中某个标号。 如果(if):用于定义条件语句。 整型(int):用于声明整型变量。 长(long):用于声明长整型变量。 登陆(signed):用于声明有符号型变量。 长度(sizeof):用于获取数据类型或变量的长度。 静态(static):用于声明静态变量或函数。 结构(struct):用于定义结构体类型。 开关(switch):用于定义多分支情况下的判断语句。 类型定义(typedef):用于定义自定义数据类型。 联合(union):用于定义联合体类型。 未登陆(unsigned):用于声明无符号型变量。 返回(return):用于从函数中返回值。 短(short):用于声明短整型变量。 如(sizeof):用于获取数据类型或变量的长度。 紧缩(volatile):用于标识变量可能会改变,以便编译器不会将其优化。 当(while):用于定义while循环。 以上就是C语言32关键字的翻译图,它们在程序中扮演着非常重要的角色,熟练掌握这些关键字,可以使程序的编写更加简洁、清晰和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhang丶&|!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值