【C语言程序设计笔记】

C语言初识关键字/宏定义

前言:
(1)关键字是C语言提供的,不能自己创建的关键字
(2)变量名不能是关键字,变量名只能由,字母、数字和下划线组成,且数字不能放开头
(3)#include / #define 等不属于关键字,属于预编译指令
(3)常见32个关键字有:
auto break case char const continue default do doulbe else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
(4)常见32个关键字分类:
a、数据类型关键字
b、存储类型关键字
c、控制类型关键字

/知识点汇总/

1、数据类型关键字

数据类型关键字表(12个):

数据类型关键字说明
int整型变量或函数
char字符型变量或函数
float浮点型变量或函数
double双精度变量或函数
enum枚举类型
short短整型变量或函数
long长整型变量或函数
signed有符号类型变量或函数
unsigned无符号类型变量或函数
struct结构体变量或函数
union联合数据类型
void修饰函数,说明函数无返回值
void修饰指针,说明指针是不确定数据类型的指针
void函数无返回值或无参数,无类型指针

注意:(1)enum 是计算机编程语言中的一种数据类型。枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内。

(2)在C语言中,可以使用结构体( Struct )来存放一组不同类型的数据。结构体的定义形式为: struct 结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员( Member )。

(3)C语言中的 union 是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值。

(4)整型的每一种都有无符号( unsigned )和有符号( signed )两种类型( float 和 double 总是带符号的)

(5)void 被翻译为"无类型",相应的 void * 为"无类型指针"。常用在程序编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。

2、存储类型关键字

存储类型关键字表(4个):

存储类型关键字说明
auto声明自动变量
static声明静态变量
register声明存储器变量
extern声明变量,在其他文件中声明,亦引用变量

注意:(1)auto声明自动变量 一般不使用/省略 。

(2)register 声明的变量是寄存器变量也是自动变量,这种变量的值是保留在cpu的寄存器中,程序运行时,访问存于寄存器内的值要比访问存于内存中值要快得多,因此当程序对运行速度较高时,可把那些频繁引用的少数变量指定为register变量以提高运行速度。
(3)static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。静态变量的存储方式与全局变量一样,都是静态存储方式。静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。
2.1、auto关键字例程
a、auto 声明自动变量
b、auto常用于局部变量
c、auto—自动创建,自动销毁—自动变量

/*例程2.1*/
#include <stdio.h>
int main()
{
	{ 
	auto int a = 10;//通常省略auto等价
	int a = 10;//通常省略auto
	}
	return 0;
}

2.2、register关键字例程
a、通过利用寄存器提升工作的速率
b、一般处理大量数据或频繁被使用的数据

/*例程2.2*/
#include <stdio.h>
int main()
{
	register int num = 100;//建议将num的值存放在寄存器中
	return 0;
}

2.3、static关键字例程
a、描述静态的数据
b、static用法:
1)修饰局部变量
2)修饰全局变量
3)修饰函数
c、栈区:存放局部变量/参数等
d、堆区:存放动态内存所分配的数据
e、静态区:存放全局变量/static所修饰的静态(局部)变量
/2.3.1static修饰局部变量/

/*例程2.3.1*/
#include <stdio.h>
void test()
{
	//int a = 1;//始终给a赋1
	static int a = 1;//static修饰局部变量时,改变了局部变量的生命周期(本质是改变了变量的存储类型)
	//此处的static int a = 1;可理解为只执行一次,把1赋值给a,然后变为静态变量,可理解为全局变量随着循环而改变a的值
	//即,可理解为:私有变公有
	a++;
	printf("a = %d\n",a);//1,2,3,4,5,6,7,8,9,
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
		//printf("i = %d\n", i);
	}
	return 0;
}

/2.3.2static修饰全局变量/
a、结合note–006.c理解
b、全局变量:整个工程均可使用
c、全局变量在其他源文件内部均可以使用,但是经过static修饰后,使得其变成内部链接属性,其他源文件就不能链接到这个静态的全局变量了。可理解为:公有变私有

/*例程2.3.2*/
#include <stdio.h>//note-006.c
extern int g_val;//extern申明同意工程文件下,其他源文件的变量

int main()
{
	printf("%d\n",g_val);
	return 0;
}
/*note--006.c*/
int g_val = 2023;//正常调用
static int g_val = 2023;
//static修饰全局变量时,使得该变量只能在自己所在的源文件中使用。

/2.3.3static修饰函数/
a、结合note–006.c理解
b、static修饰int add(int x, int y)函数,使得函数只能在函数自己所在的源文件中使用,不能在其他源文件中使用
c、本质上:static是将函数的外部链接属性变成了内部链接属性(与修饰全局变量,大相近同)

/*例程2.3.3*/
#include <stdio.h>//note-006.c
extern int add(int x, int y);//声明函数

int main()
{
	int a = 10;
	int b = 10;
	int sum = add(a, b);
	printf("%d\n",sum);
	return 0;
}
/*note--006.c*/
//正常调用
int add(int x, int y)
{
	return x + y;
}
//static修饰函数时,使得该函数只能在自己所在的源文件中使用。
static int add(int x, int y)
{
	return x + y;
}

3、控制语句关键字

分类:跳转结构关键字、循环结构关键字、分支结构关键字、其他关键字

3.1、跳转结构关键字:

跳转结构说明
goto无条件跳转语句
continue结束当前循环,开始下一轮循环
break跳出当前循环或switch结构
return子程序返回语句,可带或不带参数

注意:(1)C 语言中 break 语句有以下两种用法:
a、结束循环,且程序流将继续执行紧接着循环的下一条语句。当 break 语句出现在一个循环内时,整个循环会立即终止/跳出。
b、它可用于终止 switch 语句中的一个 case 。而continue不可以应用于 switch 语句。

(2)continue 跳过本次循环,进入下一次。而 break 是直接跳出整个循环。

(3)goto 语句可以使程序在没有任何条件的情况下跳转到指定的位置,所以 goto 语句又被称为是无条件跳转语句。使用 goto 语句只能 goto 到同一函数内,而不能从一个函数里 goto 到另外一个函数里。 不能从一段复杂的执行状态中的位置 goto 到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。 应该避免向两个方向跳转。

(4)return 表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由 return 后面的参数指定。

3.2、循环结构关键字:

循环结构说明
forfor循环结构
do循环语句的循环体
while循环语句的循环条件

注意:(1)C语言中 do 是执行某代码块的意思,do 关键字不能单独使用,通常用在 do…while循环中。

(2)在C语言中,do…while 循环是在循环的尾部检查它的条件,do…while 循环与 while 循环类似,但是 do…while 循环不管是真是假都要确保至少执行一次循环。

3.3、分支结构关键字:

分支结构说明
if条件语句
else条件语句否定分支(与 if 连用)
switch用于开关语句
case开关语句分支
default开关语句中的“其他”分支,可选

注意:(1)else不可单独使用,在C语言中 else 是与 if 一起使用的一个关键字,表示如果满足if条件则不执行 else ,否则执行else 。

(2)case不可单独使用,常用于swtich语句中,case常量表达式只是起语句标号作用,并不是该处进行条件判断。

(3)default 的作用就是switch语句里所有的 case 都不成立时所要执行的语句。 可理解为用于switch语句中的默认分支。

3.4、其他结构关键字:

其他关键字说明
const声明只读变量 (常变量)
sizeof计算对象所占内存空间大小
typedef给数据类型取别名
volatile说明变量在程序执行中可被隐含地改变

注意:(1)const是用来限定一个变量不允许被改变的修饰符,被const关键字所修饰的变量,它的值不能被改变,在整个作用域中都保持固定。

(2)sizeof 的作用就是返回一个对象或者类型所占的内存字节数(字符串则包括\0)。返回值类型为 size_t ,在头文件stddef.h 中定义 。数据类型必须用括号括住: sizeof(int)

(3)typedef在C语言中,除系统定义的标准类型和用户自定义的结构体、共用体等类型之外,还可以使用类型说明语句 typedef 定义新的类型来代替已有的类型。

(4)volatile 是一个类型修饰符(type specifier),就像我们熟悉的 const 一样,它是被设计用来修饰被不同线程访问和修改的变量; volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

3.4、typedef关键字例程
a、将类型取别名

/*例程3.4*/
#include <stdio.h>
typedef unsigned int u_int;
int main()
{
	unsigned int num1 = 100;
	u_int num2 = 100;
	return 0;
}

4、#define 定义常量与宏

a、#define或#include或#ifdef—#else–#endif 属于预处理指令
b、#define定义宏名通常为大写,且不加分号
c、#define用法(带参数/不带参数):
1)define定义常量
2)define定义宏
注意:宏具有参数,不能任意加括号,即:原封不动的调用
4.1、#define 定义常量例程

/*例程4.1*/
#include <stdio.h>
#define MAX 100//#define定义宏名通常为大写,且不加分号
int main()
{
	printf("%d\n",MAX);//100
	return 0;
}

4.2、#define 定义宏例程

/*例程4.2*/
#include <stdio.h>
#define ADD(x,y)  x+y
int main()
{
	int sum = ADD(2,3);
	printf("sum = %d\n",ADD(2,3));//5
	printf("sum = %d\n", 4*ADD(2, 3));//11---4*2+3
	return 0;
}

5、参考文献

感谢:部分知识参考学习于该博主写得很好很详细。

原文链接:https://blog.csdn.net/weixin_73020322/article/details/126419816
原文链接:https://blog.csdn.net/m0_62588419/article/details/127427782

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值