linux详细入门教程(八)------linux C语言编程基础(2)

目录

一、运算符与表达式        

1、运算符

2、表达式

 3、C语言的语句

 二、控制结构

1、三类控制结构语句

2、条件判断语句

 3、循环语句

 4、转移控制语句

 三、函数

 四、内存管理


一、运算符与表达式        

1、运算符

运算符(也称操作符)是表述最基本的运算形式的符号。C语言提供了13类共34个运算符。

1) 算术运算符

2) 关系运算符

3) 逻辑运算符

4) 位运算符

5) 赋值运算符

6) 条件运算符

7) 逗号运算符

8) 指针运算符

9) 求字节数

10) 强制类型转换

11) 分量运算符

12) 数组下标运算符

13) 其它

运算符优先级 

运算符

优先级

()[].->

1,最高

!~-(负号)++--&(取址)、*(指针)(类型)sizeof

2,右结合

*() /%

3

+-()

4

<<>>

5

<<=>>=

6

==!=

7

&(位与)

8

^

9

|

10

&&

11

||

12

?:

13,右结合

=、复合赋值符号(如:+=、*=

14,右结合

,

15,最低

2、表达式

由运算符(操作符)和运算量(操作数)组成,用以描述对什么数据以什么顺序进行什么操作。

运算符对运算量进行运算的结果称为表达式的值

任何有值的式子都可以称为表达式。

一个表达式中,最后一个运算的运算符的类型决定了表达式的类型。

 

 3、C语言的语句

C程序的基本组成部分。

C语句均以分号;结尾。

C语句可分为:指令语句、非指令语句和复合语句

指令语句

将被编译成若干条计算机的指令,以指示计算机执行相应的操作。

包括表达式语句和流程控制语句。

非指令语句

不会被编译成计算机的指令,其作用是辅助编译器翻译指令语句。

包括数据定义语句和编译预处理。

复合语句

由一对花括号括起来的一组语句,其作用是将若干条语句组成一个语法上的整体。

 

 二、控制结构

1、三类控制结构语句

条件判断语句

循环语句

转移控制语句。

2、条件判断语句

if语句

三种形式

示例

 

 

 

 switch语句

        形式

        示例

 

 

 3、循环语句

while语句

形式

当条件表达式的值为时,反复执行语句组

do...while语句

形式

反复执行语句组,直到条件表达式的值为时退出循环。

for语句

形式

首先执行初始化表达式,然后判断条件表达式,当条件表达式的值为时,反复执行语句组和值更改表达式,当条件表达式的值为时退出循环

for语句示例

 

 

 4、转移控制语句

break语句

switch语句的case分支中,用以退出switch

循环语句中,用以退出循环。

continue语句

只能用在循环语句中,作用是中止一次循环,即跳过循环语句组中位于continue之后的语句,进入下一次循环条件表达式的判断。

return语句

用于函数体内,作用是退出函数,同时可以给调用者返回一个值。

goto语句

用以将程序执行流程无条件转移到一个标号处。

标号是一个后面跟一个冒号:的标识符。

示例

 

 

 三、函数

一个C源程序由一个或多个文件构成,每个源文件就是一个编译单位。

一个C语言源文件由一个或多个函数构成。每个程序有且只有一个主函数(main),其他都是子函数。

主函数可以调用子函数,子函数可以相互调用,但子函数不能调用主函数。

函数的定义

格式

形式参数

数据类型 变量名[, 数据类型 变量名 ...]

示例

函数原型

在程序中调用函数需满足以下条件

被调用函数必须存在,且必须遵循先定义后使用的原则;

如果被调用函数定义在主调函数之后,可以在调用之前给出原型声明。

原型声明的一般格式

数据类型 函数名(形参类型 [变量名], [形参类型[变量名], ]);

说明:

为函数定义格式除去花括号与函数体的部分,加一个分号结束。

形式参数的变量名是可选的。

例:

函数的调用

一般形式

函数名([实参列表])

应注意

如果被调用没有形式参数,则不能有实参列表,但必须有圆括号;

实参个数和形参个数必须相同;

实参和形参的数据类型一一对应,必须相同或实参的类型能安全转换为形参的类型。

调用函数时,按位置顺序将实参的值一一赋值给对应的形参,这是按值传递参数的过程。

被调用函数有返回值时,主调函数中可以获取该返回值。

示例

 

 四、内存管理

C语言的标准库中提供了3个函数用以分配和回收内存。

动态分配内存函数malloc()

函数原型:void * malloc(unsigned size);

功能:在堆中分配一块size字节的内存。调用结果为新分配的内存的首地址,是一个void类型指针。若分配失败,则返回NULL

动态分配内存函数calloc()

函数原型:void *calloc(unsigned int n ,unsigned int size);

功能:在堆中分配一块n * size字节的内存。调用结果为新分配的内存的首地址,是一个void类型指针。若分配失败,则返回NULL

释放动态分配的内存函数free()

函数原型:void free(void *p);

功能:释放p所指向的动态分配的内存。注意,实参必须是一个指向动态分配的内存的指针,它可以是任何类型的指针变量。

示例

 

 

编译预处理

即在编译之前对源文件进行的处理。包括:宏定义、文件包含和条件编译

宏定义

不带参数的宏定义

格式:#define 宏名 [宏体]

如:#define PI 3.1415926

说明

宏名一般用大写字母表示,以区别于一般的变量名;

宏定义位置任意,但一般在函数外面,其作用域为从定义位置直到文件结束;

使用#undef可终止宏名作用域。如:#undef PI

预编译时,对宏进行展开操作,即用宏体来替换宏名,替换过程不作语法检查。

宏定义中应注意使用圆括号

 

 

带参数的宏定义

格式:#define 宏名(形参表) 宏体

如:#define MAX(x, y) ((x)>(y) ? (x) : (y))

说明

宏体及各形参应用圆括号括起来,以免歧义;

宏名与参数之间不能有空格;

引用带参的宏时要求实参个数与形参个数相同。其形式与函数调用相同,但处理方式不同。函数传参是在运行阶段,宏参数替换是在预处理阶段。

符号###\

把宏参数变为一个字符串,即在宏参数两边加上"

##  把两个宏参数粘合在一起,即顺序连接两参数的值;

续行符,允许分多行书写宏体,注意在\后不能有任何字符。

示例

                                        

 

 

文件包含

一个源文件将另一个源文件的内容全部包含进来

格式:#include  文件名  #include  <文件名>

#include一般用于包含.h头文件,如用于包含.c文件很容易引起变量重复定义的错误。

在预编译时,#include指令行会被所包含的文件的内容取代。

 

条件编译

在某个条件成立的情况下才进行编译。

条件编译有三种形式。

示例

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

重生之我是泰勒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值