c语言关键32个字黑马程序员,用32个关键字学习C语言

本帖最后由 xushengbin 于 2016-6-28 14:37 编辑

If you give someone a program , you will frustrate them for a day ; if you teach them how to program , you will frustrate them for a lifetime , but for you , maybe I just this person . 希望接下来的一段时间能够和大家一起探讨、学习 !

附件是这个笔记gitbook样式 , 附带目录 , 下载后请双击index文件 .

在这里, 对于C语言中32个关键字作一个汇总 , 我这边主要分为5类数据类型

顺序结构

循环结构

修饰变量

运算符让大家对C语言关键字有一个宏观的了解 , 有助于对C语言的进一步学习 .

b5b0b1954d7b1b86a4242bbd9d0c05eb.gif

18.png (143.86 KB, 下载次数: 42)

sjlx

2016-6-24 15:07 上传

基本数据类型int

整型

4个字节

取值范围 : -2^31 -- 2^31-1

int 变量名 ;

printf(); 打印变量的值占位符为 : %d

补充 :

%02d 域宽为2位 , 不足2为用0补复制代码float

单精度浮点型

4个字节

取值范围 : -2^31 -- 2^31-1

float 变量名 ;

赋值注意 : 3.14f , 1.1f  别忘了后面的f , 不然编译器就认为你这个是double类型了

printf(); 打印变量的值占位符为 : %f

补充 :

%.2f   保留小数点后2位复制代码double

双精度浮点型

8个字节

取值范围 : -2^63 -- 2^63-1

double 变量名 ;

printf(); 打印变量的值占位符为 : %lf

补充 :

%.2lf   保留小数点后2位复制代码char

字符型

1个字节

取值范围 : -2^7 -- 2^7-1

char 变量名 ;

printf(); 打印变量的值占位符为 : %c复制代码以上统称基本数据类型

对于基本数据类型的定义与赋值分2种 :

1. 先定义 , 后初始化

int num;

num = 30;

2. 定义的同时初始化

int num = 30;

补充 : 键盘接收赋值

int num;

printf("请输入一个整型数 : ");

scanf("%d",&num);复制代码

构造类型

struct

构造类型 / 结构体

存储空间 : 所有元素占用空间之和(考虑对齐)

逐个元素对齐(下个元素与之前所有元素之和对齐)

整体对齐(最后的和能单独整除所有元素)--> 最后能整除最长类型

区分结构体类型 , 结构体变量 , 结构体别名结构体类型

//结构体类型 :  这个仅仅只是定义的类型

struct Car{

int lunzi; //轮子

char *pp;  //品牌

};复制代码结构体变量

//结构体类型 :  这个仅仅只是定义的类型

struct Car{

int lunzi; //轮子

char *pp;  //品牌

}car;

变量名为 : car复制代码结构体类型起别名

typedef struct Car{

int lunzi; //轮子

char *pp;  //品牌

}iCar;

对结构体类型 :struct Car 起了别名: iCar复制代码union (用得少 , 知道是个关键字 , 知道是个类型名称就可以)

构造类型 / 共用体

解释 : 里面的元素类型公用一块内存区域enum

构造类型 / 枚举

引出 : 在实际问题中 , 有些变量的取值被限定在一个有限的范围内 , 例如 : 一个星期只有7天 , 一年只有12个月等等 , 如果把这些量说明为整型 , 字符型等是不太妥当的 , 因为一周不能被赋值为8天 , 枚举类型 , 就是列举所有可能的取值 .

一般形式 : enum 枚举类型名 {枚举值列表} ;

区分枚举类型 , 枚举变量 , 枚举别名枚举类型

//枚举类型 :  这个仅仅只是定义的类型

enum Sex{kSexMan,kSexWomen,kSexYao};复制代码枚举变量

//枚举变量 :  这个定义了类型 , 还定义了变量

enum Sex{kSexMan,kSexWomen,kSexYao} sex;

变量名为 : sex复制代码枚举类型起别名

typedef enum Sex{kSexMan,kSexWomen,kSexYao} iSex ;

对结构体类型 :enum Sex  起了别名: iSex复制代码特殊的定义类型typedef

//-------------------typedef定义类型

定义:给已经存在的数据类型取一个别名

格式:typedef 原类型 新类型名; //新类型名尽量要大写

1、基本数据类型

typedef int  MALATANG;  别名: MALATANG

3、给结构体其别名

typedef struct Person P;  别名: P

typedef struct { int screenSize; int ram;} IPHONE; 别名: IPHONE

4、给枚举类型起别名

typedef enum Sex{kSexMan,kSexWomen,kSexYao} iSex;  别名: iSex

//以下了解:-----------------------------------

2、用在数组,给数组起别名

typedef int  ARRAY[5];  别名: ARRAY

3 函数指针 , 给函数指针起别名

typedef void (*FUN)();  这个是一个无参无返回值函数指针变量的别名 , 别名 : FUN  (注意我的描述)复制代码

空类型空类型引出函数void用于返回值类型 , 返回值类型为void , 表示无返回值 , 无返回值意味值被调函数不需要返回数据给主调函数

retrunreturn关键字就是用于 被调函数返回数据给主调函数

顺序结构

结构体化程序是一个设计思想,规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性. 这种方法要求程序设计者不能随心所欲地编写程序,而要按照一定的结构形式来设计和编写程序. 它的一个重要目的是使程序具有良好的结构,使程序易于设计,易于 理解,易于调试修改,以提高设计和维护程序工作的效率.顺序结构

分支结构 if / if..else.. / if..else if.. / if..else if..else..

循环结构IF语句if

else

注意点:  分号是语句的结束,在C语言中只要是语句,都一定会有分号

//----------if语句-----------//

## 一般形式(第一种形式):表示如果表达式为真,执行语句块1,否则不执行。

//一:     if

if(判断表达式)

{

语句块1;

}

.......

后续语句;

//二:    if...else

if ...else ...语句使用

## 如果表达式为真,则执行语句块1,否则执行语句块2

if(表达式)

{

语句块1;

}else{

语句块2;

}

//三:      else if

## 如果表达式1为真,则执行语句块1,否则判断表达式2,如果为真执行语句块2,否则再判断 表达式3,如果真执行语句块3, 当表达式1、2、3都不满足,会执行最后一个else语句。

if(表达式1)

{

语句块1;

}else if(表达式2){

语句块2;

}else if(表达式3){

语句块3;

}else{

语句块4;

}

了解+理解:

//四.if(表达式)   省略括号     if的作用范围一直到;结束

##   开发坚决不要省略括号

if(表达式)

语句1;

语句2;

-----

|

|

V

if(表达式){

语句1;

}

语句2;

试做一题:

int a=1;

if (a>1) {

printf("a>1\n");

}else if(a++){

printf("a>2\n");

}else if(a>3){

printf("a>3\n");

打印哪几句 ? 还是其中一句 ?

//-------------------if值得注意的地方

注意点:

1.分支语句只会执行其中一个分支

2.省略括号只对下一条语句有效

if(表达式)

语句1;

语句2;

if(表达式){

语句1;

}

语句2;

3.分支语句可以嵌套

if(表达式1){

if(表达式2){

}

}else{

}

4.省略括号后下一句不允许定义变量  //记忆

if(表达式)

int a = 0;

printf("xxx");

//  可以这么写也可以不这么写,关键你要知道 = (赋值),与 ==(关系运算)的区别

5.==判断的时候建议常量写在前面

int a = 0;

if(0 == a){   //判断

......

}

-----------

if(a = 0){  //赋值   把0赋值给a,最后以a的值作为表达式的值

....

}

//------------

if(a==0){   //判断  看a是否等于0

printf("a");

}

printf("b");复制代码switch语句switch

//---------switch分支语句-----------//

1)使用格式

switch(表达式){   //switch 表达式 必须是 整型常量,整型变量或者整型表达式,或者字符变量,字符常量

case 常量1: 语句1;       //case   常量表达式  必须是整型 常量  'a'

case 常量表达式2: 语句2; ...

case 常量表达式n: 语句n;

default: 语句n+1;

}

其语义是:

计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如 表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。复制代码

//---------switch分支值得注意的地方---------//

1) 表达式的类型(case语句后的值)必须是整型或可以转变为整型的值 (short、char和int类型)。

整型变量    整形常量   返回值是整形的表达式   可以装换为int类型的表达式

2) 功能代码部分可以写任意多句。

3) case语句可以有任意多句,可以不用加括号“{}”

4) break关键字的意思是中断,指结束switch语句,break语句为可选。复制代码

1)case的值1、值2...值n只能为整型常量(整数),不能为变量。

2)case后面不可以直接定义变量

如果在case后面定义的变量必须加上大括号

执行流程:在执行的过程中,如果遇到break语句,则跳出switch语句。如果没有遇到break 语句,则一直执行到switch语句的结束。复制代码

casecase

//---------case语句的穿透问题-----------//

case语句执行的过程中,一旦进入某个分支后就会一直执行到switch结束。

为了避免上述情况,使用break语句,可以跳出switch语句.复制代码

defaultdefault

所有case条件不匹配 , 最后就执行deault中的语句复制代码breakbreak

结束break复制代码循环结构引出循环 :

//---------循环结构-----------//

循环结构是程序中一种很重要的结构。

其特点是,在给定条件成立时,反复执行某程序段, 直到条件不成立为止。给定的条件称为循环条件,

反复执行的程序段称为循环体。

循环结构简单来说就是:循环是一次又一次的执行相同的代码块

//  7次  格式

while语句;

do-while语句;

for语句;

一般来说   一个循环需要以下几部分构成:

1)循环控制条件  循环退出的主要依据,来控制循环到底什么时候退出

2)循环体       循环的过程中重复执行的代码段

3)能够让循环结束的语句(递增、递减、真、假等) 能够让循环条件为假的依据,否则退出循环复制代码while语句while

//---------while循环-----------//

while ( 条件表达式 )

{

语句1;

语句2;

....(让条件表达式为假/有一句可以让循环结束)

}

1)while循环的特点:

如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行

2)while语句的语义是:

如果条件成立,就会执行循环体中的语句“循环体”。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环复制代码dowhile语句do

//---------do-while-----------//

while(条件){

语句块;

}

当型循环:当条件满足的时候,再去执行循环体

do {

语句1;

语句2; ....

} while ( 条件 );

直到型循环:先执行循环体,然后判断条件,直到条件为假就结束

1)do...while语句的语义

2)do-while循环的特点:

不管while中的条件是否成立,循环体中的语句至少会被执行一遍

对比:

while    是先判断再执行    30%

do-while 是先执行再判断    5%

当循环条件第一次判断不为假的时候,while和do-while执行的次数相同,为假,do-while会执行一次复制代码

//---------while的死循环-----------//

死循环:就是一直都执行循环体中的代码,不会退出

while(条件);

1)不知道要循环的次数的时候使用最佳 常常妙用死循环

2)在某个范围內查找满足条件的值

终端终止操作:   control+c复制代码for语句for

//---------for循环-----------//

一般形式:

for( 表达式1 ; 表达式2 ; 表达式3 ) {

语句;

}

for循环执行过程

(1) 先求解表达式1。

(2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下 面 第(3)步。若为假(值为0),则结束循环,转到第(5)步。

(3) 求解表达式3。

(4) 转回上面第(2)步骤继续执行。

(5) 循环结束,执行for语句下面的一个语

for语句常见的形式:

for(循环变量赋初值;循环条件;循环控制语句)

for(int i = 0; i<10 ; i++){

语句块;

}

改写成: while

int i = 0;

while (i<10){

语句块;

i++;

}

//---------for循环值得注意的地方-----------//

1)表达式省略(三个表达式都可以省略)

如:for(; ;) 语句相当于while(1) 语句

了解:

2)循环控制无关的任意表达式

表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。

for(int i=1,j=0;i<=100;i++,j++)

//---------for循环的嵌套-----------//

//第一种理解方式:把打印一行的代码,执行了5次

for (int j=0; j<5; j++) {

//打印一行 * ,有5个

for(int i=0;i<5;i++){

printf("*\t");

}

printf("\n");

}

//外层控制行数,里层控制列数复制代码continecontine

//---------continue-----------//

continue语句的作用是跳过循环体中剩余的语句而继续下一次。

continue语句只用在 for、while、do-while等循环体中,常与if条件语句一起使用,用来"加速循环"。

break的用法:

while(表达式1){

......

if(表达式2) break;

...... }

continue的用法:

while(表达式1){

......

if(表达式2) continue;

...... }复制代码breakbreak

//---------break-----------//

break和continue语句都可以用在循环中,用来跳出循环(结束循环);

break语句还可以用 在switch语句中,用来跳出switch语句。

当break语句用于

do while

for

while

循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与while语句联在一起,即满足条件时便跳出循环。

注意:

1)break  用在循环与switch中

2)在多层循环中,一个break语句只向外跳一层。复制代码修饰变量

b5b0b1954d7b1b86a4242bbd9d0c05eb.gif

bianliang.png (19.88 KB, 下载次数: 35)

bl

2016-6-24 15:20 上传

constconst

const修饰的变量 , 是只读的 , 内容不可该复制代码const与变量搭配使用

const int num = 1;

num++;     //错误

num = 20;  //错误

Cannot assign to variable 'num' with const-qualified type 'const int'复制代码

总结 : const修饰的变量 , 可读不可改

const与指针变量搭配使用const 在 * 前面 : 指针的指向可以变 , 地址对应的值不可变int num = 10;

const int *p = #

int const *p = #

指针的指向可以变 , 地址对应的值不可变

p = &num2; //这个可以

但是 *p = 30;  // 这个错误  Read-only variable is not assignable复制代码const 在 * 后面 : 指针的指向不可以变 , 地址对应的值可变int num = 10;

int * const p = #

指针的指向不可以变 , 地址对应的值可变

p = &num2 ;  //这个错误  Read-only variable is not assignable

*p = 10;   //  这个可以复制代码

理解:  1.

const int *p;    常量指针   指向常量的指针   所以值不能变,指向可变

int const *p;

int * const p;   指针常量   这是个常量      指向不可变,值可变复制代码最后 , 如果还是没法懂 , 就强行记忆 :

const 在 * 的左侧      指向可变,值不能变

const 在 * 的右侧     指向不可变 值可变

const 在 * 的两侧     指向和值都不可以变复制代码整型变量修饰符以下4个修饰符只能修饰整型short

short num ;  // 占2个字节的整型复制代码long

long num ;   //  占8个字节的整型复制代码signed

定义变量默认被signed修饰 , 代表有符号的整型复制代码unsigned

定义变量默认被signed修饰 , 代表无符号的整型 .

当然 unsigned char ch;  也是正确的  因为char类型底层是字符通过ASCII码转成二进制的整型保存在内存中 , char也分符号复制代码static和externstatic

修饰函数

被static修饰的函数都为内部函数 , 只能在本文件中使用

修饰全局变量

被static修饰的全局变量都为内部变量 , 只能在本文件中使用

修饰局部变量

被static修饰的局部变量 , 为静态变量 , 保存在静态区(全局区) , 作用域范围不变, 延长变量的声明周期

extern

定义的函数 , 全局变量 , 默认被extern修饰 , 可以跨文件使用

被extern修饰的函数都为外部函数 , 可以多文件使用

被extern修饰的全局变量都为外部变量 , 可以多文件使用

extern不能修饰定义局部变量(无意义)

补充 :auto

定义局部变量 , 默认就是auto修饰的

表示系统会自动回收此局部变量 , 在作用域结束位置复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值