||C||<基础>C语言基础知识框架结构//个人整理使用|仅供参考|

来源:互联网 发布:数据包怎么上传到淘宝 编辑:程序博客网 时间:2024/05/16 17:51


C语言基本介绍

20151117星期二

上午9:00

C语言:面向过程的高级语言,不需要任何运行环境支持便能运行的编程语言
只能有一个主函数main函数基本结构int main(){}

C语言程序从编写到运行经过的步骤是:
编写代码汇编语言链接重构运行
其中前两步都是编译器执行的     编译器也是软件而不是硬件

注意:
1注意使用英文标点和空格
2不要随意加标点
3区分大小写
4操作的目录
5代码书写区域与规范
6编译器的警告及错误提示
7要运行必须有且只有一个函数
8不要想太深

9多加练习


注释

20151117星期二
下午9:27


对代码作解释说明,辅助试调代码.不参加编译,只能在一句完整代码后面

//单行注释

/*

 

*/多行注释




 



关键字

20151117星期二

下午9:32


 

 

 
 关键字全部小写,使用频繁,系统自动高亮
 
typedef可以给一个数据类型取一个别名,方便使用定义typedef 类型 别名;
特点:

宏定义可以实现部分typedef的功能,但是不能完全替换,因为typedef本身具有类型含义

 
staticextern用于控制一个变量或函数的作用域
函数分内部函数和外部函数,表示这个数默认是外部函数 ,如果前面加了static,就表示这是一个内部函数.只能被本文件访问别的文件就算声明了也不能访问.
一个函数前面如果什么也不加,表示这个默认是外部函数,跟加上extern效果一样.
外部的全局变量:extern表示可以被其他文件访问操作
同时所有定义的同名变量都是同一个.
内部的全局变量:static表示当前这个全局变量只能被本文件访问,外部文件无法操作它的值
局部变量一旦被static修饰,那么它只会在函数执行第一次的时候创建,如果函数再次执行,其将会复用之前创建的变量.同时这个变量的生命周期直到程序结束

特点:


 
 
autoconst
auto用于定义一个能自动回收的临时变量,这个变量在作用于内用完后会自动销毁
const用于定义一个常量,这个常量在常量区,且在内存中仅有一份,且不能更改
用法:auto 数据类型 变量名;(默认所有局部变量都是被这个修饰,可以省略)
           注意:1static修饰的除外 2 全局变量除外
       const 数据类型 变量名=;    定义的常量可以复用
         注意一旦定义,值就固定不能被改变
       :constinta;   a=0;//错误 const inta=5;//正确   const inta;//a的值是系统随机数
 
 
goto
作用:可以让指令能够不受条件限制跨越执行,
用法:
inta=0;
If(a==0){
     goto  heima;
}
printf("itcast");
heima:printf("heima");
 
 
registervolatile
register表示让程序优先把这个数存在寄存器中
volatile表示让编译器不要去优化代码,不能用缓存,每次使用都必须取内存中获取
用法:
修饰变量:register 数据类型 变量名;
                  volatile  数据类型 变量名;
register:如果一个变量使用相当频繁且占用内存不大可以使用
                全局变量和加了static的局部变量除外
volatile:如果需要让计算机严格按写的指令执行,且能关注变量每一次值的变化,这个时候可           
                以使用,则编译器不会对执行指令作优化
 

 

标示符

20151117星期二

下午9:35



在程序中自定义的符号和名称
 
Machine generated alternative text:规 则 : 由 26 个 英 文 字 母 的 大 小 写 、 10 个 阿 拉 伯 数 字 0 · 9 、 下 划 线 一 以 及 $ 符 号 组 成 . 仅 这 些 ! 不 能 用 特 殊 字 符@# % ^ & 气 不 能 和 关 键 字 重 名 . 规 范 : 比 如 标 识 符 不 推 荐 开 头 大 写 : MYName | s 应 该 写 成 myNamels
 
注意:
1不能以数字开头
2不能与关键字重名
3严格区分大小写
4起名要有意义
5便于识别驼峰命名法


数据基本介绍
20151117星期二
下午9:39
 
计算机存储的数字,文字.图像.声音等都是数据.
 
Machine generated alternative text:静 态 数 据 和 动 态 数 据 ? ? ? 1 > 静 态 数 据 : 数 据 被 保 存 之 后 , 只 要 设 备 没 有 被 损 坏 , 不 管 通 没 通 电 , 数 据 都 是 存 在 的 . 一 般 存 在 硬 盘 中 , 2 > 动 态 数 据 : 数 据 加 载 到 内 存 中 , 一 断 电 , 数 据 就 不 在 了 .
 
Machine generated alternative text:Byte 和 bit 的 区 别 计 算 机 存 储 的 数 据 是 0101 的 二 进 制 数 据 , 二 进 制 数 据 的 每 一 位 叫 做 一 bit , 二 进 制 数 据 每 8 位 叫 做 一 字 节 , 就 是 B 尹 e 计 算 机 内 存 中 的 存 储 单 位 一 般 是 字 节 ( B e )
计算机数据单位bit ByteKB MB G T
 
 
Machine generated alternative text:C 语 言 中 的 数 据 类 型 短 整 型 、 hort c 语 言 包 含 的 数 据 如 下 图 所 示 : 型 int 型 长 整 型 long 数 值 类 型 单 精 度 型 float 浮 点 型 基 本 类 型 双 精 度 型 double 字 符 类 型 char 夭 要 学 习 , 的 类 型 数 组 u 数 据 类 型 结 构 体 struct 构 类 型 共 用 体 umon 枚 举 类 型 ent 皿 指 针 类 型 空 类 型 void
 

 

 
常量
20151117星期二
下午9:45
 
固定不变的数据
整型常量   浮点型常量   字符型常量   字符串型常量
                                                 不能是中文    可以是中文
Int                float/double                     char
Machine generated alternative text:/ / 整 形 靠 量 1 / / 单 精 度 浮 点 数 1 · If / / 双 精 度 浮 点 数 1 · 11111111111111223 / / 字 符 幫 量 《 注 意 只 能 是 非 中 文 字 符 ) / / 字 符 串 常 量 ( 可 以 是 中 文 ) / / 通 过 const 定 义 一 个 整 型 常 量 C 0 n S t 1 n t 1991 1 立 尖 / / 通 过 宏 来 定 义 定 义 一 个 薑 型 常 量 #define MAX 1991
 
 
Machine generated alternative text:float : 单 精 度 浮 点 型 , 可 以 理 解 为 精 度 比 较 小 的 小 数 , 它 的 精 确 度 为 有 效 数 字 7 位 . ( 第 8 位 不 一 定 精 doub 双 精 度 浮 点 型 , 可 以 理 解 为 精 度 较 大 的 小 敵 庀 的 精 度 为 有 效 数 字 15 位 . ( 第 16 位 不 一 定 精 确 ) 有 效 数 字 . 左 边 开 始 第 一 位 不 为 零 的 数 开 始 向 右 数 相 应 的 位 数
 

 

变量
20151117星期二
下午9:49
 
定义一个经常改变或不确定的数据
Machine generated alternative text:变 量 的 基 本 用 法 / / 疋 × 一 个 艾 團 如 足 × 一 亻 、 艾 , int / / 定 义 一 个 变 量 的 时 候 让 他 有 初 始 值 int 2 · / / 如 何 给 已 经 定 义 了 的 变 赋 值 9 ℃ 3 ·
同一作用于下不能定义同名变量
 
Machine generated alternative text:就 近 原 则 : 通 过 变 量 名 使 用 变 量 时 , 会 优 先 在 当 前 作 用 域 寻 找 变 量 , 没 有 就 到 父 层 寻 找 , 找 不 到 就 会 报 错
 
Machine generated alternative text:不 同 的 编 译 器 下 , 各 种 数 据 类 型 的 变 量 或 常 量 所 占 的 内 存 的 存 储 空 间 是 不 同 的 16 位 编 译 器 char int float double 32 位 译 器 位 编 译 器
 
Machine generated alternative text:int num; int numl ; int num2; 1 2 3 4 6 7 8 9 10 11 12 13 7fff34662c01 7fff54662c02 7fff54662c03 7fff54662c04 7fff54662c05 7fff54662c06 int int nun Ox7fff54662c08 Ox7fff54662c09 Ox7fff54662clO int Ox7fff54662c11
 
Machine generated alternative text:打 印 变 量 的 地 址 1 2 3 5 6 7 8 , 26 变 量 内 4 分 桁 ℃ , m , 的 #include «stdio.h* main() ' In t int 19 printf(" 变 ma 的 内 存 地 址 是 8pXn",&a);
 
外部的全局变量:extern表示可以被其他文件访问操作
同时所有定义的同名变量都是同一个.
内部的全局变量:static表示当前这个全局变量只能被本文件访问,外部文件无法操作它的值
 

 

printf()函数
20151117星期二
下午9:53
 
数据输出函数
printf("%d",a);
Machine generated alternative text:add( b) int int int return main( ) int int count; int a løø; int b 20 ; add(a,b); count printf( return Ø; COunt) ;
 
Machine generated alternative text:prin 廿 函 数 的 格 式 控 制 符 %p 指 针 的 值 常 用 : % d 整 数 % f 浮 点 数 %c 单 个 字 符 % s 字 符 串 printf ( " 打 印 整 数 变 量 或 者 常 量 \ n 巪 整 型 常 量 / 整 型 变 量 ); printf ( " 打 印 浮 点 数 变 量 或 者 常 量 96f \ n 巪 浮 点 型 常 量 / 浮 点 型 变 量 ) ; printf ( " 打 印 单 个 字 符 变 量 或 者 常 量 \ n " , 字 符 常 量 / 字 符 变 量 ); printf ( " 打 印 字 符 串 96S \ n " , 字 符 数 组 名 / 字 符 指 针 ); / / 以 后 会 讲
 
Machine generated alternative text:prin 廿 打 印 要 求 的 格 式 和 变 量 的 实 际 的 类 型 要 匹 配
控制输出位数%m.nf表示输出浮点数,有效数字为m,小数点后为n
 

 

scanf()函数
20151117星期二
下午10:00
 
可以按制定的格式让用户在键盘上把数据输入到指定变量之中
scanf("%d",&a);
scanf函数的格式化字符串中不恩能够添加\n
可以单个或批量输入,%%之间分隔的内容必须按原样输入

算术运算
20151117星期二
下午10:04
 
+       -      *       /      %
           取余

 

 
特点:
1 若用高精度向低精度赋值,会丢失精度
    Int a;
    a=1.8;//打印出来会有警告 a=1
    a=(int)1.8;//强制转换,无警告
2 优先级:*/%大于+-  从左到右
3 参与运算的两个数精度不同的时候会自动精度转换,从低精度向高精度转换
4 同精度运算只能达到同精度结果,如需提高精度,需要强制类型转换
 
 
赋值及自增自减运算
20151117星期二
下午10:12
 
赋值:=    +=   -=
自增自减:++   --
常量不能进行自增自减运算
a++先用再加     ++a先加再用
a+=2  a=a+2  a-=2  a=a-2
 
 
 
sizeof的用法
20151117星期二
下午10:16
 
sizeof是关键字 单目操作符
单目操作符:只有一个内容参与运算  ++  --
双目操作符:两个内容参与运算 +-*/….
sizeof后直接连字符sizeofa;字符会直接变成相应的ASCII码对应的int
Machine generated alternative text:size 。 f 的 使 用 过 程 中 , 什 么 时 候 用 括 号 , 什 么 时 候 不 用 ? 打 印 数 据 类 型 的 字 节 数 的 时 候 用 ; 打 印 常 量 或 者 变 量 的 时 候 可 以 用 也 可 以 不 用 .
 
 
 
关系运算
20151114星期六
上午9:01
 
==     >   <     >=     <=   !=
把运算符放在两个要比较的数据中间,成立为1,不成立为0
特点:
1 关系运算符运算结果是int:01
2 优先级:<><=>=相同,优先于==!=,==!=-相同
3 结合律是从左往右,先看优先级,再看结合律
 
 
Machine generated alternative text:先 运 算 红 线 , 再 运 算 绿 线 1 / · 关 系 运 算 · / 冫 *include cstdio · h» 3 int main()l 红 线 1 : : 2 不 正 确 , 所 以 为 假 , 1 : : 2 这 个 表 达 式 值 是 0 , ( C 语 言 中 真 6 7 int a: = prin€f'Ci n",a); return 0 , 用 1 表 示 , 假 用 0 表 示 ) 绿 线 把 0 这 个 值 赋 值 给 a ,
 
Machine generated alternative text:1 / · 关 系 运 算 · / 2 'include «stdio · h» 3 int main( )( 6 / / 攵 矗 t a · 1 > 2 , 7 / / in a · 1 < 2 : 8 / / 支 矗 意 a · 1 > · 2 ; 9 / / int a · 1 < · 2 : / / 支 矗 t a · 1 丨 = 2 : 11 printf("8dXn".a); / / 优 先 级 0 , < , ” , “ , 优 先 级 相 等 , 但 大 于 一 和 . 同 时 一 与 “ 优 先 級 相 等 . int a—I—z return 先 算 红 色 , 2 > 3 结 果 为 假 , 就 是 0 再 算 绿 色 1 : : 0 结 果 为 假 , 就 是 0 所 以 运 算 结 果 是 a : 0 ,
 
 
逻辑运算
20151114星期六
上午9:14
 
||    &&  !
对多个表达式进行并列真假判断,真输出1,假输出0
||一真为真,同假为假
&&一假为假,同真为真
!真假调换
特点:
1 所有数据都有真假值,0为假,其它所有数都为真
2 如果||左边为真,则右边不执行
   如果&&左边为假,则右边不执行

3 优先级顺序从高到低(),-(负号),!,算术运算符,关系运算符,&&,||

 

 
 
三目运算符
20151114星期六
上午9:45
 
真假判断表达式1 ?表达式2 :表达式3
根据条件成立与否执行不同表达式,返回不同的值,简化代码
 
先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果:
如果表达式1为假,则执行表达式3,返回表达式3的结果
 
注意:三个语句必须能够判断真假,并且不能定义变量
 

 
 
基本运算总结
20151114星期六
上午10:04
 
重点:算术运算,关系运算,逻辑运算
算术运算的难点:
%:取余数
     只对整数有效果,符号前后都必须是整数
Machine generated alternative text:double d—l. 2*2.1; return O Elì*;
    
Machine generated alternative text:如 何 让 一 个 数 无 论 怎 么 增 加 都 不 会 超 过 某 个 值 . 答 案 : 让 这 个 嫩 去 余 以 你 需 要 的 值 . 如 : 我 希 , 远 不 要 大 于 3 . 则 让 这 个 敵 去 、 3 . 果 必 定 不 会 大 于 3 ,
 
关系运算注意等于是==
 
逻辑运算
 
 
熟悉:
自增++与自减--    自增+1自减-1
Machine generated alternative text:难 点 : 就 是 自 增 符 ( 自 减 符 , 在 前 与 在 后 的 区 别 如 果 符 号 在 前 . 先 自 增 或 自 减 , 冉 参 与 别 的 运 算 . ++a 一 int a 0 : int + + a : b 这 时 是 1 : 如 果 符 号 在 后 . 先 参 与 别 的 运 算 , 再 自 增 或 自 减 . a 一 a—; Int a—O : int b a + + ; 0 这 时 是 0 ;
 
三目运算符   ?   ,
前面成立给?后面的结果,不成立给:后面的结果
Int a=1>2?1:2;
1>20,所以取2.   a=2
 
Machine generated alternative text:忧 先 运 算 符 〈 仁 〉 、 i ns t & 与 〕 从 左 到 右 从 右 向 左 从 左 向 右 从 左 向 右 从 左 向 右 从 左 向 右 从 左 向 右 从 左 同 石 从 左 问 右 从 左 向 右 从 左 向 右 从 左 向 右 从 右 向 左 从 右 向 左
 
优美的代码,两个核心:
1.用尽量少的代码实现所需功能
2.代码可读性尽可能好
 
 
ASCII
20151114星期六
上午10:40
 
美国标准信息交换码
统一用8位二进制(一个字节)表示所有大小写字母,数字0~9,标点符号,
以及美式英语中的特殊控制符,规则一致,便于交流通信.
需要把字符转换成数字的时候使用
特点:
1 区分大小写
2 没有中文
3 字符在运算时会自动转换成ASCII所以sizeof 'a'输出值为int的字节数4
中国使用GBK2312:2个字节,16
                  UTF-8:3个字节,24
没有用正确的编码格式打开对应的文档会乱码
Machine generated alternative text:3 一


C语言的流程控制

20151114星期六

上午11:42

 

 

 

 

选择结构:if    switch 

循环结构:while    dowhile   for

 

 

选择结构语句if

20151114星期六

上午11:45

 

用来判定所给条件是否满足,根据判定结果(真或假)决定执行给出两种操作其中一个

If(){}满足条件执行

If(){}else{}满足条件执行一种方案,否则执行另一种

If(){}elseif(){}满足条件执行一种方案 ,不满足则判断第二个条件,第二个条件满足则执行下一个方案,再不满足则判断下一个条件

       只要有一个条件满足,后面的条件判断不会继续执行

If(){}elseif(){}else{}满足条件执行一种方案 ,不满足则判断第二个条件,第二个条件满足则执行下一个方案,再不满足则执行else{}内代码

       只要有一个条件满足,后面的条件判断和else不会继续执行

 

If();满足条件执行当前语句

特点:

1一次if语句只能执行给出的所有操作中的一个

2if();只有;前语句有效.且不能定义变量

3出了if();这种用法,if(){}之间不能有;

 

 

 

选择结构语句switch

20151114星期六

下午1:59

 

编程中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的具体操作

作用:可以根据不同的int值匹配执行不同操作

用法:switch(表达式){case常量表达式1:语句1;break;case…;default:语句n;}

当判断int值匹配不同的值执行对应操作时使用,简化代码结构

特点:

1条件结果只能是整数,case只能是整型常量.注意:case 'a'case 97

2break可有可无,有则执行完跳出,没有则继续执行,直到遇到下一个break或执行完

3default可有可无,有则如果条件都不满足,会执行这一句,无则条件都不满足,执行结束

4case下面要定义变量必须加{},case后面的常量值不能重复

5switch语句可以全部用if语句替代,if语句不能全用switch替代.

 

条件判断的地方可以进行算数运算,前提是必须是整数

 

 

循环结构语句whiledo while

20151114星期六

下午2:00

 

编程循环语句,当满足条件时进入循环,循环判断,直到不满足条件跳出循环

作用:可以根据条件反复执行一段代码

形式:while(条件){语句}          do{语句}while(条件)

当需要重复执行一段代码.或满足一定条件重复执行的一段代码实现相应的功能

特点:

1只有满足条件循环才执行

2死循环会一直循环执行,除非程序强制退出在终端下按control+c才能强制退出程序,终止死循环

3如果碰到continue,则跳出本次循环继续下一次判断,如果条件成立继续执行循环.在同一作用域下,continue之后不能写代码,因为根本不会执行

4如果遇到break.无论条件是否满足,循环立即结束

5continuebreak跳出的都是当前所在循环,对外部循环没有作用

6dowhile至少执行一次,while不一定

 

 

循环结构语句for

20151117星期二

上午9:06

 

编程循环语句,当满足条件时开始循环判断执行,直到不满足条件跳出循环

作用:

可以根据条件反复执行一段代码

用法:

for(语句1;语句2;语句3){}第一个语句是开始前执行,第二个语句是判断真假,如果真,则执行大括号里的语句.语句3是每次循环执行完以后执行的语句

执行顺序:语句1判断语句2是否成立--成立循环体语句3判断语句2是否成立-------直到语句2不成立,for循环终止

注意:

1for循环中定义的变量,只在for循环中有效

2语句1只会执行一次:一般用于初始化.如果用于定义同一类型变量可以定义多个

For(inta=0,b=0;   ;  ){}

3语句2是条件语句,控制for循环是否继续执行,如果条件不满足,for循环结束.必须要有一个判断结果,如果为空,表示默认为真,是死循环.

4语句3不一定会执行,一般用于控制循环增量或变化.不能放变量定义语句

5for循环的循环体没有限制,可以放任意想执行的语句

特点:

1只有满足条件循环才执行

2死循环会一直循环执行,除非程序强制退出在终端下按control+c才能强制退出程序,终止死循环

3如果碰到continue,则跳出本次循环继续下一次判断,如果条件成立继续执行循环.在同一作用域下,continue之后不能写代码,因为根本不会执行

4如果遇到break.无论条件是否满足,循环立即结束

5continuebreak跳出的都是当前所在循环,对外部循环没有作用

6循环嵌套,如果子循环本身定义了变量,用自己的,如果没有,则会去上上一层的作用域寻找,就近原则.

Machine generated alternative text:1. 请 Ebreak 与 continue 有 什 么 区 别 ? 1 -break : 可 以 用 于 s “ eh 和 while , do while*LforG 环 但 continue 不 能 用 于 switch . 2 . break 是 继 束 当 前 switch 或 循 环 语句 . 。 。 inue 是 结 束 本 次 循 环 , 继 续 判 断 执 行 下 一 次 循 环 . 相 同 点 : 在 break 与 continue 相 同 作 用域 下 , 二 者 下 面 都 不 能 放 代 码 , 因 为 不 会 执 行 . 还 有 二 者 都 是 关 键 字 、 / . f 。 r 语 句 与 while 语 句 可 以 互 换 吗 7 二 者 的 相 同 点 及 区 别 是 什 么 ? 1 . 可 以 互 換 , 2 · 二 者 都 是 去 根 条 件 反 复 执 行 相 同 的 代 码 · 3 . 区 别 是 : 二 者 结 构 用 法 不 一 样 . while( 条 件 判 断 )l 循 环 体 . . do( 循 环 体 . . )while { 条 件 判 断 fo 语 句 1 : 语 句 2 ; 语 句 3 , { 环 体 . .

死循环

Machine generated alternative text:三 个 最 簡 擊 的 死 环 的 写 法 . 旺 e 0 , while 卩 , : for 0

如果省略{},则下面不能定义变量,因为作作用域不明确

 

 

流程控制总结

20151117星期二

上午11:24

 

    选择结构:if    switch 

    Machine generated alternative text:2. if 4. if if... else else else else if

     

    Switch:代码一旦进入case,它只会在碰到break以后才会执行结束,否则会一直执行完整个switch语句

     

    循环结构:while    dowhile   for

     

    Machine generated alternative text:靄 环 控 制 While do While 学 知 识 点 : 先 把 语 法 德 定 . ( 这 个 继 构 如 何 去 定 义 , ile { 条 件 )( 写 上 你 想 执 行 的 仨 何 代 码 dol / / 写 上 你 执 行 的 任 何 代 码 )while { 条 件 , : f 。 粼 初 始 化 变 量 ; 变 量 的 条 件 控 : 变 量 的 变 化 )l / / 写 上 你 想 执 行 的 任 何 代 码

    能确定次数的时候适合用for,不能确定适合用while

     

    打印图形:

     

     Machine generated alternative text:是 平 面 的 . 那 么 只 有 行 与 列 组 成 . 所 以 : 窿 彬 核 心 就 是 要 搞 清 楚 有 几 行 , 几 列 . 外 循 环 控 制 行 数 , 内 环 控 制 列 数

C语言函数

20151114星期六

下午4:45

    编程中对一段功能代码的封装

    作用:可以封装代码,方便调用,提高复用性

    用法:

    定义:返回值类型函数名(形式参数类型参数名1,……){具体代码;return返回值}

    调用:函数名(实际参数1,实际参数2….);

    特点:

    1返回值类型不定义默认是int,如果不需要具体返回值类型用void(return可以省略)

    2是否要定义参数看是否有未知内容参与运算,调用时参数必须对应,参数传递的是值

    3return可以有多个,但是如果执行到return就不会再执行后面的代码,函数执行结束

    4函数不调用不执行,执行顺序看调用顺序

     5函数必须定义才能调用,不能重复定义不能嵌套定义.可以调用别的函数,但是不能自己调用自己(死递归:内存溢出)

     

    Machine generated alternative text:int add(int a, int b) I // int a—O; / int b—O; printf( "8d+€d—€d" , ; return O ; int add ( 3 , 4 int c— , int d—O; int int b—O; printt( •ed+8d—ed" , a, b, a+b) 7

     

    参数被用于定义好的函数里以后,不管函数里经过怎样的计算,对于参数本身的值不会有影响

 

 

 

函数的声明

20151117星期二

下午3:15

 

对编译系统的说明,用于通知系统在本函数中所调用的函数是什么样的类型

作用:可以告诉编译器我将定义什么函数,从而让别的函数能方便调用

用法:把函数去掉{}拷贝到声明区域(函数里或外)

特点

1只声明可以不创建函数,但调用必须定义函数

2声明可以只有参数类型,省略参数名:intadd(int);

3函数使用前应声明,不声明就默认当返回值是int类型处理,很可能出错

4声明区域可以在其他函数里或外,只要在主函数调用之前声明就可以

 

注意:

函数返回值是什么类型就用什么类型的变量接取.如果不匹配有时不会报警告

 

 

函数总结

20151117星期二

下午5:17

 

Machine generated alternative text:函 数 : 核 心 : 对 一 段 小 功 能 的 封 装 , 也 就 是 一 个 程 序 的 片 段 1. 代 码 简 洁 2 , 增 加 复 用 性 先 搞 定 格 式 . 函 数 该 如 何 定 义 : 返 回 值 函 数 名 , 数

 

进制的基本概念

2015年11月17日 星期二

下午10:34

 

计数方法,二进制,八进制,十进制,十六进制.任何进制的任意位都不能大于或等于其本身.

 

十六进制数字里不区分大小写

 

 

编程中进制的用法及转换

2015年11月18日 星期三

上午9:16

 

二进制:0b或者0B开头

八进制:0开头

十进制:直接写

十六进制:0x或0X开头(最大F)→0123456789ABCDEF

 

任何数据在内存中都是二进制,一个字节代表一个8位的二进制

占用x个字节,就表示占用8*x位二进制

 

进制的转换

 

 

数据的取值范围

2015年11月18日 星期三

上午10:18

  默认有符号类型

 

singned和unsigned只能修饰int型char型,int可以省略

unsigned int的取值范围是0~232-1

signed的取值范围是-231-1~231-1

 

 

 

类型说明符

2015年11月18日 星期三

上午10:37

 

C语言中用来说明某个变量是什么类型的关键字 int float double char….

作用:说明一个变量的类型,从而便于区分及优化内存

用法:写在要定义的变量名前面   long long int=0;

long是当前字节数*2,short是当前字节数/2

 

 

 

   %lld 

 

 

位运算

2015年11月18日 星期三

上午11:16

 

直接对整数在内存中的二进制位进行操作的方法

只能操作整型数据

作用:直接通过操作二进制的位来实现运算

用法:

&与运算:对应的两个二进位均为1时,结果才为1,否则为0(有假则假==0)

|或运算:对应的两个二进位有一个为1时,结果位就为1,否则为0(有真为真==1)

^异或运算:对应的二进位不同时为1,否则为0(不同为真==1,相同为假==0)注意:1 相同整数相^的结果是0;2 一个数^另一个数两次结果不变2^3^3=2;3 整数相^跟顺序无关;4 任何数^0,数值不变

~取反运算:对整数各二进位进行取反,包括符号位(0变1,1变0,真假互换)→单目操作符

<<左移

>>右移

 

区别与逻辑运算符&&   ||  !

 

源码补码反码

 

 

 

转义字符

2015年11月18日 星期三

下午3:00

 

用来改变字符原有的含义,如\0打印出来的是一个空字符,而不是字符'0'

作用:用来表示常见的那些不能显示的ASCII字符,如换行,引号等

用法:

 

 

 

 

进制及内存分析总结

2015年11月18日 星期三

下午3:34

 

 

 

把变量a的值跟变量b的值交换的方法:

 


数组的基本概念

20151118星期三

下午6:51

 

用来存储一组数据的容器 构造类型

作用:同一类型的一组数据统一管理起来

用法:

   定义:数据类型 数组名[长度(数量)]

   初始化:类型 数组名[(长度)]={元素1,元素2,…}

   赋值:数组名[角标(索引)]=

   使用:数组名[角标];inta=arr[0];

数组是否正确,看是否是同一类型,是否有关联.如果类型不一致,会丢失精度

需要管理一组有关联的数据时使用

特点:

Machine generated alternative text:1 敵 组 必 须 要 定 义 长 度 ()E 整 数 ) 健 义 时 可 初 始 化 ( 长 度 必 须 是 常 量 之 后 单 独 初 始 化 2 擞 组 是 有 序 的 每 个 数 据 都 有 角 标 以 0 开 始 分 配 标 不 能 ” 数 组 长 度 . 类 型 一 致 3 擞 组 有 地 址 ( 数 组 名 ) , 里 面 的 元 素 也 有 地 址 . 数 组 当 参 敵 时 ( 长 度 可 省 ) 传 递 的 是 地 址 . 生 敵 组 当 参 数 传 递 时 是 指 针 类 型 , 所 以 如 果 需 要 用 数 组 长 度 要 额 外 传 递 .

 

Machine generated alternative text:定 义 : 薮 据 类 型 數 组 名 { 长 度 { 数 量 : int arrt31; 压 初 始 化 : 类 型 数 组 名 t( 长 度 川 : 飙 元 素 1 , 元 素 2 冖 } int arr 〔 3 ] { 70 , BO , 90 } : 初 始 化 的 第 二 种 方 式 , 单 独 初 始 化 · 7 int arr2 31 : / / arr2 { 70 , 80 0 此 / / 错 arr2 { 01 70 冫 arr2 { 1 ] 80 ; arr2 { 2 ] 90 ; / · 韧 始 化 的 第 三 种 方 式 , 省 长 度 吖 arr3 冂 { 70 , BO , 90 } : printt("arr3t1F*dXn",arr3tIl); / / 数 组 必 须 要 定 义 长 度 正 整 数 , , //int arr 一 1 0 丷 / 错 误

如果省略长度,那么表示,后面初始化几个元素,长度就为几

数组第一个元素的地址就是这个数组的地址二者是一致的 变量寻址是从高位到低位,数组的寻址是从低位到高位

Machine generated alternative text:arr7C- arr7t0J arr7 6 9 10 13 14 15 17 Oxifff5e8cObdO 0x7fff5e8c0bd1 0x7fff5e8cObd2 0x7fff5e8c0bd3 0x7fff5e8c0b 0x7fff5e8c0b 0x7fff5e8c0bd6 0x7fff5e8cObd7 Ox7fff5e8c0bd8 0x7fff5e8cObd9 0x7fff5e8cObd10 0x7fff5e8cObd11

 

Machine generated alternative text:数 组 名 取 地 址 表 示 数 组 的 地 址 变 量 a ” 7 对 应 的 地 址 是 & arr7 变 量 a 对 应 的 地 址 & a &arr7COJ &arr7CIJ VXaOCaaaaa Oxabcaaaab Oxabcaaaac Oxabcaaaad Oxabcaaaae Oxabcaaaaf OxabcaaabO Oxabcaaabl Oxabcaaab2 Oxabcaaab3 IOxabc Oxabcaaab5 Oxabcaaab6 Oxabcaaab7 Oxabcaaab Oxabcaaa Oxabcaaab 1 2 1 结 论 : 从 值 的 角 度 来 讲 数 组 名 : 数 组 首 元 素 的 地 址 : 数 组 名 取 櫞 址

 


角标不能大于等于数组长度

Machine generated alternative text:2_MAKnnm.c No selection main ( ) count —5; a (countl— b (count I; return 10 11 12

 

Machine generated alternative text:其 实 , 完 全 不 初 始 化 的 情 况 下 , 不 管 什 么 类 型 , 一 般 都 是 随 机 数 : 只 有 初 始 化 了 一 部 分 的 慵 况 下 , 没 初 七 的 部 分 , 数 債 型 的 赋 值 为 0 , 字 符 型 的

 

 

Machine generated alternative text:要 记 住 : 下 面 是 C 语 言 中 对 数 组 名 的 规 定 . 数 组 名 代 表 数 组 第 一 个 元 素 的 地 址 . 所 以 打 印 数 组 名 用 % p !

 

 

二维数组

20151119星期四

上午9:49

 

用来存储一组数组的容器

作用:用于把同一类型的数组统一管理起来

用法:

定义:类型  数组名[子数组的数量][子数组的长度];

初始化类型  数组名[子数组的数量][子数组的长度]={{数组1},{数组2}….}

赋值:数组名[数组角标][子数组的数据角标]=;

使用:数组名[数组角标][子数组的数据角标];inta=arr[0][1];

需要管理一组有关联的数组时使用

特点:

Machine generated alternative text:l. 与 数 组 基 本 一 样 但 传 递 子 数 组 时 传 递 的 是 地 址 2 子 数 组 数 量 控 制 列 数 , 单 个 子 敵 组 长 度 控 制 列 数 . 3 . 每 个 子 敵 组 类 型 及 长 度 一 致 .

 

子数组的数量可以不填,dan但子数组的长度必须有值

Inta[][3]={1,2,3,4,5,6};这个是正确的

Inta[3][]={{1,2},{2,3},{3,4}};这个是错误的

 

 

字符串

20151120星期五

下午2:40

 

是一串字符,也是一个以'\0'结尾的字符数组

作用:表示一串字符或文本数据0     

用法:

    定义及初始化:chararr[]="abc";chararr[4]={'a','b','c','\0'};

    

 

Machine generated alternative text:乁 0' 的 了 是 0 . 所 以 这 里 也 可 以 写 义 为 : char 了 门 飙 , char arrl 冂 —"abc0 巪 / / 这 里 的 0 表 示 字 符 0 , 俨 注 意 , Machine generated alternative text:#include cstdio.h» *include •zstring.h:• main ( ) int char printfWs strcpy(a, printf(nssxn" return e; Machine generated alternative text:3 4 5 6 7 91 "Inc Lucie es main( ) st31z "abc" char "haha"• printf( return e; ,s,sl,ss);

特点:

Machine generated alternative text:1 后 面 必 须 有 结 尾 喳 则 只 算 普 通 的 字 符 数 组 . 但 啊 ' 不 会 输 出 , 只 表 示 字 符 串 结 東 2 字 符 串 输 出 占 位 用 必 须 遇 到 皿 才 能 结 束 , 否 则 会 继 续 输 出 更 高 位 地 址 值 的 字 符 . 3 , strlen 函 敵 用 于 计 算 一 个 字 符 串 的 长 度 ( 字 符 数 团 , 使 用 必 须 引 入 t 山 lg 山 豳 4. strten 不 会 计 算 且 碰 到 、 0 结 東 , 但 是 e 。 f 不 受 XO 影 响 , 且 长 度 会 包 含 5 字 符 串 一 定 是 字 符 数 组 , 但 字 符 数 组 不 一 定 是 字 符 軋

 

中文字符等于三个英文字符

Machine generated alternative text:I strlenfi 'd' 1 2 4 5 6 7 9 10 #inctude -«st ring.h» main ( ) char printf( blH printf( return e; 'c' IXO' , *luxn" sizeo, sizeof a b , strlen(a)); , strlen(b));

 

 


指针

20151121星期六

上午8:59

 

Int a=5;

Int*p=&a;

p ==&a变量a的地址    *p ==a变量a  &p==p指针p的地址

指针是一个能存地址的数据类型

作用:用于存储某一地址,从而可以通过地址直接对该地址内存空间中的数据进行操作

用法:

当需要存储地址,以便操作该地址及该地址所在的数据的时候使用

指针的所占的字节是8个字节

特点

 

 

 

Int*p;

p=&a;

 

如果强行使用会报非法内存

 

Int *p[3]代表定义了一个可以存放3个整型指针的数组

Int (*p)[3]代表定义了一个包含3个元素的int型数组的指针  

修改值的写法(*p)[0]=1

 

 

 

指针与数组

20151121星期六

上午11:46

 

指针数组:表示一个数组,用来存指针的数组

数组里的元素都是指针,int *p[3];表示定义一个可以存3int指针的数组

  用法:

    赋值:inta=1,b=2,c=3;

              int *p[3]={&a,&b,&c};

    取值:int *a=p[0];

数组的指针:表示一个指针,而这个指针类型是数组指针类型,int(*p)[3];表示这是一个含有3个元素的int数组的指针

 

数组元素的指针:表示一个指针,而这个指针存的是数组一个元素的地址,intarr[1]={1};int *p=&arr[0];

 

特点:

 

 

 

 

 

具体跳几个字节看数组类型int4,char 1

 

 

 

指针与二维数组

20151121星期六

下午2:23

 

二维指针数组是一个数组,里面的每一个子数组存的元素类型都是指针

二维数组的指针:是一个指针,指针类型是二维数组

 

 

 

指针与数组的本质

20151121星期六

下午4:19

 

 

结论:数组具有指针的一部分特性,但是它不是指针.两者是完全不同的两个数据类型

如果数组当参数传递时或赋值时,仅把里面第一个元素的地址传过去了

 

 

 

 

 

 

 

指针与函数

20151123星期一

上午12:57

 

    指针型函数

    是函数,这个函数的返回值类型是指针

    定义:类型   *函数名(参数){return 指针类型;}

    int  *add(int *a){return a;}表示定义一个返回值int指针类型add函数

    #include <stdio.h>

    int *hehe(int *p);

    int main(){

        int a=1;

        int *m =&a;

        printf("%p\n",m);

        hehe(m);

        printf("%p\n",hehe(m));

        return 0;

    }

    int *hehe(int *p){

        return p;

    }

    打印结果

    Rio:test a1$ ./a.out 

    0x7fff58719c18

    0x7fff58719c18

     

     

    函数的指针 当需要把函数当做参数使用时使用

    是指针,函数也会在内存中开辟空间.函数指针即这块空间的地址

    定义:函数返回值类型(*指针名)(参数类型);

    赋值:指针名=函数名

    :定义函数intadd(inta){….}.  Int (*p)(int)=add;

    用法:指针名(实参);

    :p(3);等效于add(3);  不同于其他类型指针使用需要前面加*

    Machine generated alternative text:定 义 : 翥 返 回 型 0 针 名 , 敵 类 型 , , int C•p3)(int): 儐 : 指 针 名 - 函 数 名 冫 p3—addl : 使 用 : 针 名 实 , , , 如 : 以 3 , , 籌 效 于 轟 0 , , int b , p3 { 3 , :

    #include <stdio.h>

    int haha(int a);

     

    int main(){

         int (*p)(int);

         p=haha;

         int a=1;

         a=p(a);

         printf("%d\n",a);

         return 0;

    }

    int haha(int a){

         return a=a+1;

    }

     

    特点:

    Machine generated alternative text:1 . 函 敵 指 针 做 加 减 运 算 可 以 , 但 没 有 意 义 不 建 议 . 2 , 函 数 指 针 可 以 当 作 参 数 传 递 . 因 为 其 是 一 个 指 针 类 型 , 3 · 不 管 什 么 类 型 的 指 针 , 只 要 是 指 针 , 其 里 面 存 的 就 是 地 址

     

    函数中,不管是什么参数的传递,都是值传递.

    Machine generated alternative text:0 23 一 美 黾 0 , 匕 , sintazO SmartArt 丿 , J 片 审 aint 翻 豪 一 国 ' A• int* ps&a ; 一 一 1 、 28 一 一 为 宰 a 《 p ) 和 橐 ; 0 卜 黑 马 程 序 员 itheima com 于 万 肉 沙 走 巋 而 尹 指 针 与 二 什 么 是 指 针 型 函 数 ? 是 区 数 . 这 个 函 数 的 返 叵 值 类 型 是 指 针 , 定 义 ' 类 型 * 函 数 名 (爹 数 Hreturn 指 针 类 型 ;y 如 :int *add(int •a)(retum & a ; } . 表 示 定 义 一 个 返 回 值 是 Int 指 型 的 add 数 . 二 什 么 是 函 定 义 : 函 数 返 回 类 型 “ ! nt. § 您 紧 数 名 如 : 先 定 义 函 数 i add(int 丿 U/.„).int (*p)(int)-add• № t , ) ; 如 . p ( 3* 于 add ( 3 ) ; 使 用 : 指 针 名 ( 实 0x123 三 , 有 什 么 特 点 1 . 函 数 指 针 做 运 算 可 以 , 但 没 有 意 义 不 建 议 · 函 数 指 针 可 0 作 参 数 传 递 因 为 其 是 一 个 指 针 类 型 . 指 针 , 只 要 是 指 针 , 其 里 面 存 的 就 是 地 址 . 3 . 不 管 什 么 类

     

    指针的类型决定指针移动时跨越的字节数

    指针移动不受限制

 

 

指针与字符串

20151123星期一

上午7:54

 

数组方式定义字符串:char arr[]="abc";    char arr[]={'a','b','c','\0'};  变量

 指针方式定义字符串:char *p="abc";常量

常量区的常量与变量的区别     常量区的常量,只有在程序退出才会销毁,否则会一直存在

1.常量区的常量只有一份,也就是重用的时候,用的都是同一个,地址一样

2.而变量定义的同一个字符串,不同变量地址不同

特点:

指针定义字符串的时候,存的是常量区字符串的首地址

指针定义的字符串是常量,不能被改变,而字符数组定义的是变量,可以被改变

 

适用场景:

 

 

 

 

指针字符串与字符数组区别的补充

 

不能改变

可以改变

 

打印数组定义的字符串

 

打印指针定义的字符串

 

 

总结

20151124星期二

上午10:38

 

 

 

指针不赋值是野指针,其值是随机地址

指针赋值0.是空指针

注意,指针本身的地址和存的地址是不一样的.

指针本身的地址是不能改变的,而它存的地址是可以改变的

 

要点:指针移动的字节数,只跟指针的类型有关

指针是什么类型,移动一步就跨越该类型相对应的字节数



全局变量

20151124星期二

上午10:54

 

在所有函数外部定义的变量,称为全局变量

作用:用于存储一个需要长期存于内存,并需要改变的变量

用法:跟普通变量没区别,只在位置在所有函数之外

Int add();

Int a;

Int main(){

      add();

      add();

      printf("%d",a);

      return 0;

}

Int add(){]

      a++;

     return 0;

}

当需要定义一个随程序一直存于内存中,并可以被其他函数共享的变量的时候使用

特点:                                    程序启动时就存在

这里跟普通变量不同,普通变量不初始化,默认值是随机数

在定义时,即使定义多次,也是同一个变量,

 

包括指针 0x0

 

 

结构体

20151124星期二

上午11:29

 

数据类型,是构造类型,可以存不同类型的数据

作用:用于封装不同类型的数据类型到一个结构中,方便使用

用法:                                                   此为自定义

   定义:1.定义结构体类型struct 结构体类型{数据类型名称;数据类型名称;…};

structhehe{charxixi;inthuhu;};

              2.定义结构体变量及类型:struct  结构体类型 变量名={数据1,数据2,…};

structhehep1={"mnm",3};

    取值:变量名,结构体元素变量名;

    赋值:变量名,结构体元素变量名=新值;

当需要把相关联的不同数据类型封装起来一起使用的时候使用结构体

特点:

嵌套定义

 

 

批量重新赋值方法,如果不这样,必须要每个元素单独赋值

 

 

全局结构体

 

 

结构体数组

20151124星期二

下午4:15

 

数组,只不过数组里每一个元素都是结构体类型

作用:存储多个有关联的结构体

用法:

定义及初始化赋值:struct结构体类型数组名[长度={结构体1,结构体2};

 

 

 

结构体指针

20151124星期二

下午4:23

 

是指针,只不过指针类型是结构体类型

作用:存储结构体地址,并操作地址对应的结构体空间里的数据

用法:

 

 

指针移动对结构体本身没有意义,结构体名并不包含第一个元素的地址

 

 

结构体内存分配

20151124星期二

下午5:03

 

结构体分配内存遵循两个原则  -->对齐原则/对齐算法

1.每个元素的偏移量(当前元素首地址距离整个结构体首地址的字节数)必须是自己所占有字节的整数倍,如果不够,补齐上个元素的字节数

2.整个结构体的字节数必须是其最大元素字节的整数倍,如果不够,最后一个元素填充字节

作用:增加cpu寻址效率

 

 

 

 

 

枚举

20151124星期二

下午7:13

 

是一种构造类型的数据类型.里面存的都是有别名的整型常量

作用:可以把多个整型常量以别名的形式封装成一个整体,便于别的变量识别并取值使用

用法:

取值:变量名=枚举元素名

枚举一旦类型定义成功以后里面的数据常量不能改变

特点:

如果设定一个元素的值,那么后面元素的值都按此元素的值排列

   1.定义枚举类型 enum 枚举类型{元素1 , 元素1 , …}; 

     或{元素1=0,元素2=1,}

     */   

    enumDay{        

        MONNING,//0   注意每个元素后面是逗号

        NOON,//1

        NIGHT,//2       

    };   

    //2.定义枚举变量及赋值: enum 枚举类型 变量名=对应枚举里的一个元素名;

    enum Daydaystatus=MONNING;    

   // 取值:变量名=枚举元素名;

    daystatus=MONNING;

    printf("daystatus=%d\n",daystatus);


 

宏定义

20151126星期四

上午1:37

 

是一个替换代码的预处理指令

作用:在编译之前进行代码替换

用法:

   开始替换:#define被替换内容  替换成的内容        不要加分号;

:#define  kLength  6    表示从这行开始下面所有代码中的kLength替换成6

结束替换: #undef被替换内容   :#undefkLength表示到这一行,宏定义失效

当需要重复性代码或简单的函数运算时使用,提高效率

特点:

 

防止出现(2+3)*(3+4)2+3*3+4

 

 

 

 

条件编译

20151126星期四

上午3:04

 

是根据条件编译代码的预处理指令

作用:可以让一段代码只在满足条件才编译,提高编译效率

用法:

通用:#if条件表达式   #elif 条件表达式   #else

与宏定义相关:

#ifdef宏名   表示定义了宏  #ifndef宏名 表示没有定义宏

#endif 结束条件编译,注意,一定要加

当一些代码只需要在特定条件下编译时使用

特定:

 

 

 

 

#include的用法

20151117星期二

下午4:17

 

C语言中的一个预处理指令

作用:把一个文件的内容拷贝到这行命令所在的位置

用法:

     引用:自定义的文件:#include "文件路径和名称"

     编译器类库里的文件:#include <文件名>

当程序需要用到别的文件时使用

特点:

1可以定义在函数外,也可以放在函数内

2必须包含路径,省略或 ./ 表示当前路径  /开头表示绝对路径  ../表示上一层路径

3#开头,后面不能加分号;

4必须定义在要使用之前,否则可以编译通过生成.o文件,但不能链接成功

 

 

 

#include是单纯的替换

       

 

 

C语言的头文件

20151117星期二

下午4:04

 

C语言中以.h结尾的文件,stdio.h

作用:用于声明一个函数,把多个代码文件中的函数,声明在这个文件中,便于重用防止定义冲突

用法:

    定义:新建一个以.h结尾的文件,需要用到的函数的声明直接放在里面..h文件中不能有主函数

    引用:自定义的头文件:#include "头文件名.h"

               编译器类库里的头文件:#include <头文件名.h>

当程序需要由多个.c文件组成时使用

特点:

1在头文件中仅作声明,不做具体使用

2在头文件有声明只能确保编译成功成.o文件,但不确保能链接成功

3自定义的头文件引用必须要有路径,如果.h文件跟.c文件都在同一目录下可以不加路径,否则必须要有路径             头文件路径错误是代码报错的一大问题

 

 

 

 

在终端中cc -c文件名1.c文件名2.c  把连续编译并链接两个.c文件,链接的所有文件只有一个主函数.

 

 

递归

20151126星期四

上午6:52

 

是指在函数的定义中使用函数自身的方法,就是函数自己调用自己

作用:实现一些反复执行的操作

用法:

Int add(int a){

If(a==0)return 0;

Return a+add(a-1);

}

必须要有一个确切的返回节点,不再继续调用,否则就是死递归

当有一些反复的操作,但没有告知明确次数的时候使用

特点:可以用循环实现递归的所有操作递归可以用循环替换

 

德罗斯特效应

 

 

文件操作

20151126星期四

上午7:22

 

 

 





0 0