C语言程序设计笔记---006

  • C语言初识关键字和宏定义
    • 1、数据类型关键字
    • 2、存储类型关键字
    • 3、控制语句关键字
      • 3.1、跳转结构关键字:
      • 3.2、循环结构关键字:
      • 3.3、分支结构关键字:
      • 3.4、其他结构关键字:
    • 4、#define 定义常量与宏

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赋1static 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、循环结构关键字:

循环结构 说明
for for循环结构
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);//100return 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));//5printf("sum = %d\n", 4*ADD(2, 3));//11---4*2+3return 0;
}

C语言学习笔记---初始C语言006相关推荐

  1. C语言学习笔记---初始C语言001

    C语言程序设计笔记---001 初识C语言 1.C语言的标准 2.C语言的特点 3.第一个C程序 ***/知识点汇总/*** 基于VS2019编译器展示一下 代码片: 4.自我介绍 初识C语言 1.前 ...

  2. c语言注释语句执行吗,C语言学习笔记之C语言概念解析(附资料分享)每一个语句都必须以分号结尾但预处理命令函数头和花括号“}”之后不能加分号...

    [[怪兽爱C语言]C语言学习笔记之C语言概念解析(附资料分享)]https://toutiao.com/group/6582429294901854728/?iid=15906422033&a ...

  3. Dart 语言学习笔记(Dart语言完全指南)

    Dart 语言学习笔记 Part 1:概览 Dart是一门纯OOP语言.所有的类都继承于Object类.null也是对象,变量仅仅存储对象的引用 Dart是强类型语言,即使Dart可以进行类型推断(使 ...

  4. C语言学习笔记:C语言的指针函数与函数指针??

    前言 在C语言里函数.指针这两个词结合的顺序不同其意义也不同,即指针函数与函数指针的意义不同,这是什么情况呢?估计许多学习C语言的小伙伴已经感觉自己懵懵的了,别急且听小编来说个明白. 指针函数 指针函 ...

  5. C语言学习笔记之C语言简史(不看后悔系列)

    文章目录 C语言简史 一.什么是C语言? 只要计算机体系架构不变,C语言就会长盛不衰. C语言简史 一.什么是C语言? 麻省理工学院,AT&T贝尔实验室,通用电气,三方大佬,准备为GE-645 ...

  6. C语言学习笔记1——C语言程序

    C语言简介: BCPL ->newB ->C ->UNIX ->Minux ->Linux ->gcc C语言诞生于1970-1973年,在肯·汤姆逊和丹尼斯·里奇 ...

  7. [R语言学习笔记1] R语言for循环的使用

    学习R语言的过程中,后期逐渐就会用循环语句来减少自己的重复工作.所以了解for循环,是必备技能之一. R语言中的for循环结构是: for (循环变量 in 序列向量){表达式1表达式2...} 要注 ...

  8. R语言学习笔记--《R语言实战》

    文章目录 R语言基础 一.数据结构 1. 向量 2. 矩阵 3. 数组 4. 数据框 5.列表 二.数据输入 1.键盘输入 2.分隔符文本输入 (csv) 图形初阶 一.图形参数 1.符号和线条 2. ...

  9. r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//") > setwd("e:\桌面\") > ...

最新文章

  1. BASE64 编码和解码
  2. Python 实现程序的单一实例
  3. 嵌入式培训学习历程第二十二天
  4. VTK:Shaders之BozoShaderDemo
  5. Flask中session和cookies的设置、删除、修改、获取
  6. MFC多线程处理界面假死之红外图像数据获取和excel写入
  7. vscode删除文件夹,VSCode:删除文件中的所有注释
  8. base href= php,如何正确定义项目下的base href(页面中所有相对链接的基准URL)...
  9. html怎么隐藏y方向内容,如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法...
  10. android抽屉风格,Android开发实战之拥有Material Design风格的抽屉式布局
  11. 【图论】Kruskal算法求最小生成树详解
  12. AKKA:大数据下的并发编程模型
  13. ASP.NET 中处理客户端数字证书
  14. 怎么用python实现序列比对_生信学习笔记——Python+Mafft实现批量化多序列比对
  15. 秒懂,Java 注解 (Annotation)你可以这样学
  16. 汽车操作系统的前世今生
  17. Python实现csv与excel互转
  18. 面对爱情,相当真诚的星座,将心比心,单纯善良
  19. H2O机器学习框架的学习
  20. android 文件存储基础

热门文章

  1. Nginx代理内网服务器访问外网
  2. 十二生肖欠揍问答 (转)
  3. 电信大数据分析有什么作用
  4. [Linux 基础] -- Linux 如何查询 OS、CPU、内存、硬盘信息?
  5. 明年完成百余城高精地图绘制,详解晶众的营收之道
  6. C++ Primer 中文版(第4版) 不完全勘误表
  7. 微信公众号:自媒体运营的方法有哪些(07)
  8. istio功能介绍(一.Istio基本功能)
  9. # istio 实战 五 网格可视化 - kiali
  10. 不懂产品的研发,不是好 CTO