网页浏览总次数

星期五, 二月 23, 2024

C语言学习笔记

C语言语法基础


32个关键字

下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

关键字 说明

auto 声明自动变量

break 跳出当前循环

case 开关语句分支

char 声明字符型变量或函数返回值类型

const 声明只读变量

continue 结束当前循环,开始下一轮循环

default 开关语句中的"其它"分支

do 循环语句的循环体

double 声明双精度浮点型变量或函数返回值类型

else 条件语句否定分支(与 if 连用)

enum 声明枚举类型

extern 声明变量或函数是在其它文件或本文件的其他位置定义

float 声明浮点型变量或函数返回值类型

for 一种循环语句

goto 无条件跳转语句

if 条件语句

int 声明整型变量或函数

long 声明长整型变量或函数返回值类型

register 声明寄存器变量

return 子程序返回语句(可以带参数,也可不带参数)

short 声明短整型变量或函数

signed 声明有符号类型变量或函数

sizeof 计算数据类型或变量长度(即所占字节数)

static 声明静态变量

struct 声明结构体类型

switch 用于开关语句

typedef 用以给数据类型取别名

unsigned 声明无符号类型变量或函数

union 声明共用体类型

void 声明函数无返回值或无参数,声明无类型指针

volatile 说明变量在程序执行中可被隐含地改变

while 循环语句的循环条件


数据类型

C 中的类型可分为以下几种:

序号 类型与描述

1 基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型。

2 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。

3 void 类型: 类型说明符 void 表明没有可用的值。

4 派生类型: 它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。


整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

类型 存储大小 值范围

char 1 字节 -128 到 127 或 0 到 255

unsigned char 1 字节 0 到 255

signed char 1 字节 -128 到 127

int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647

unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295

short 2 字节 -32,768 到 32,767

unsigned short 2 字节 0 到 65,535

long 4 字节 -2,147,483,648 到 2,147,483,647

unsigned long 4 字节 0 到 4,294,967,295


您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。


浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:


类型            存储大小 值范围 精度

float         4 字节 1.2E-38 到 3.4E+38         6 位小数

double 8 字节 2.3E-308 到 1.7E+308 15 位小数

long double 16 字节 3.4E-4932 到 1.1E+4932 19 位小数



运算符

算术运算符

下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符 描述 实例

+ 把两个操作数相加 A + B 将得到 30

- 从第一个操作数中减去第二个操作数 A - B 将得到 -10

* 把两个操作数相乘 A * B 将得到 200

/ 分子除以分母 B / A 将得到 2

% 取模运算符,整除后的余数 B % A 将得到 0

++ 自增运算符,整数值增加 1 A++ 将得到 11

-- 自减运算符,整数值减少 1 A-- 将得到 9


关系运算符

下表显示了 C 语言支持的所有关系运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符 描述 实例

== 检查两个操作数的值是否相等,如果相等则条件为真。 (A == B) 不为真

!= 检查两个操作数的值是否相等,如果不相等则条件为真。 (A != B) 为真

> 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 (A > B) 不为真

< 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 ( A < B) 为真

>= 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 (A >= B) 不为真

<= 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 (A <= B) 为真


逻辑运算符

下表显示了 C 语言支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:


运算符 描述 实例

&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假

|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真

! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 (!A)    为假


位运算符

下表显示了 C 语言支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

运算符 描述

& 按位与操作,按二进制位进行"与"运算。运算规则:0&0=0;    0&1=0;     1&0=0;      1&1=1;

| 按位或运算符,按二进制位进行"或"运算。运算规则:`0

^ 异或运算符,按二进制位进行"异或"运算。运算规则:0^0=0;    0^1=1;    1^0=1;   1^1=0;

~ 取反运算符,按二进制位进行"取反"运算。运算规则:~1=0;    ~0=1;

<< 二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)

>> 二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃


赋值运算符

下表列出了 C 语言支持的赋值运算符:


运算符 描述 实例

= 简单的赋值运算符,把右边操作数的值赋给左边操作数 C = A + B 将把 A + B 的值赋给 C

+= 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 C += A 相当于 C = C + A

-= 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 C -= A 相当于 C = C - A

*= 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 C *= A 相当于 C = C * A

/= 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 C /= A 相当于 C = C / A

%= 求模且赋值运算符,求两个操作数的模赋值给左边操作数 C %= A 相当于 C = C % A

<<= 左移且赋值运算符 C <<= 2 等同于 C = C << 2

>>= 右移且赋值运算符 C >>= 2 等同于 C = C >> 2

&= 按位与且赋值运算符 C &= 2 等同于 C = C & 2

^= 按位异或且赋值运算符 C ^= 2 等同于 C = C ^ 2

|= 按位或且赋值运算符 C |= 2 等同于 C = C | 2


杂项运算符 ? sizeof & 三元

下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof 和 ? :。


运算符 描述 实例

sizeof() 返回变量的大小。 sizeof(a) 将返回 4,其中 a 是整数。

& 返回变量的地址。 &a; 将给出变量的实际地址。

* 指向一个变量。 *a; 将指向一个变量。

? : 条件表达式 如果条件为真 ? 则值为 X : 否则值为 Y


常量

整数常量

整数常量可以是十进制、八进制或十六进制的常量。

前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。

后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

下面列举几个整数常量的实例:

212         /* 合法的 */

215u        /* 合法的 */

0xFeeL      /* 合法的 */

078         /* 非法的:8 不是八进制的数字 */

032UU       /* 非法的:不能重复后缀 */

以下是各种类型的整数常量的实例:

85         /* 十进制 */

0213       /* 八进制 */

0x4b       /* 十六进制 */

30         /* 整数 */

30u        /* 无符号整数 */

30l        /* 长整数 */

30ul       /* 无符号长整数 */


浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。


当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

下面列举几个浮点常量的实例:

3.14159       /* 合法的 */

314159E-5L    /* 合法的 */

510E          /* 非法的:不完整的指数 */

210f          /* 非法的:没有小数或指数 */

.e55          /* 非法的:缺少整数或分数 */


字符常量

字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的简单变量中。

字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。

在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。下表列出了一些这样的转义序列码:


转义序列 含义

\ \ 字符

' ' 字符

" " 字符

? ? 字符

\a 警报铃声

\b 退格键

\f 换页符

\n 换行符

\r 回车

\t 水平制表符

\v 垂直制表符

\ooo 一到三位的八进制数

\xhh . . . 一个或多个数字的十六进制数

定义常量

在 C 中,有两种简单的定义常量的方式:

使用 #define 预处理器。

使用 const 关键字。

#define FAR 16

const int far = 16;


操作字符串的函数

序号 函数 & 目的

1 strcpy(s1, s2); 

复制字符串 s2 到字符串 s1。

2 strcat(s1, s2); 

连接字符串 s2 到字符串 s1 的末尾。

3 strlen(s1); 

返回字符串 s1 的长度。

4 strcmp(s1, s2); 

如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。

5 strchr(s1, ch); 

返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。

6 strstr(s1, s2); 

返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。






没有评论:

发表评论