C程序设计(学习记录)


2018.4.17~2018.5.10
完成了对电子文档的第一轮初步学习,总结如下:

参考书籍:

###《C程序设计语言》,Brian W Kernighan,机械工业出版社,第二版
###《C程序设计》,谭浩强,清华大学出版社

掌握程度:
进一步理解和掌握基本概念、相关原理;
掌握了C语言的大致范围。

具体内容总结:

1.概述

变量、常量、函数、声明、循环语句(while、for)、数组、参数

(1)常量:程序运行过程中,值不能被改变的量。
符号常量:用一个标识符代表一个常量,用#define定义。一般标识符(常量名)采用大写,气质在作用内不能被改变、不能再被赋值。
(2)变量:其值可以被改变;必须先声明,后使用;应该有名字(标识符);名字必须字母开头,可以由字母、数字、下划线组成;变量值存储在内存单元。
(3)声明(declare):说明属性(主要是类型)。
(4)参数:所有函数参数通过“值”传递的,传递给被调函数的值存在临时变量中,而不是在原来的变量中。被调函数不能直接修改主调函数的值,只能修改其临时副本私有的值。

2.类型、表达式和运算符

变量名、数据类型、常量、声明、运算符(算术、关系、逻辑、自增自减、位运算符、赋值运算)、运算符优先级、类型转换、表达式(条件表达式、赋值表达式)

(1)变量名:数字、字母、下划线组成,区分大小写,必须以字母开头。
(2)数据类型:C语言的数据结构以数据类型的形式出现。
在这里插入图片描述
(3)常量:5类–整型常量、实型常量(浮点型)、字符常量(单引号)、字符串常量(字符数组)、符号常量。
(4)声明:一个声明表明一种类型,后面变量表可以跟多个变量。被const限定的变量不能被修改。
(5)运算符:1)算术:+ - * / %(加、减、乘、除、余);2)关系: > < == >= <=(大于、小于、等于、大于等于、小于等于);3)逻辑:! && ||(非、与、或);4)自增减:++ --;5)位运算:<< >> ~ ^ & | (左移、右移、取反、异或、位与、位或);6)赋值:=
&:按位或,经常用于屏蔽某些二进制位
(6)运算符优先级
  总体: ! >算术运算符 > 关系运算符 > && > || > 赋值运算符
  口诀:
  括号成员第一;
  全体单目第二;
  乘除余三,加减四;
  移位五,关系六;
  等与不等排第七;
  位与异或和位或,“三分天下”八九十;
  逻辑与和或,十一和十二;
  条件高于赋值;
  逗号最低;
(7)类型转换:当一个运算符的几个操作数类型不一致,需要转换成一致的类型。自动转换时,符合“窄”—>“宽”原则。
(8)表达式:1)条件表达式:三目运算符 x ? a :b 2)赋值表达式:eg. I+=2;

3.控制流

   程序语言中的控制流语句用于控制计算操作执行的先后顺序。
   语句和程序块
   If-else(else-if)
   For语句
   While(do-while)语句
   Switch语句
   Break、continue、goto语句
  (1)语句:表达式末尾加上分号“;”构成语句。
  (2)程序块:用一对花括号“{”“}”把一组声明和语句括在一起就变成了复合语句,也称为 程序块。
  (3)Switch语句中,case的作用只是一个标号。
  (4)For语句适合初始化和增加步长都是单条语句,且逻辑相关,将循环控制语句放在一起,更紧凑。
  (5)Do-while语句至少被初始化一次,循环体至少被执行一次。
  (6)Break和continue只能用于for语句和while语句,不可用于switch语句;且break和continue只是跳出最内层循环,goto彻底跳出到标号处。

4.函数与程序结构

  程序可以看成变量定义和函数定义的集合。
  函数概念
  返回值
  外部变量
  作用域规则(外部变量/函数)
  头文件
  静态变量
  寄存器变量
  程序块结构
  初始化
  递归
  C预处理器
  小结:局部变量和全局变量
(1)函数:具有特定功能的程序块。
在这里插入图片描述
定义:
函数不能嵌套定义函数;默认返回值类型为int。
(2)返回值:return 表达式;无返回值时,return 0,如main函数,结尾都是return 0.。
(3)外部变量:external,定义在函数外部的变量,通过一个名字对外部变量的所有引用,实际上是引用同一个对象,外部链接。一个源程序中,一个外部变量只能在某一个源文件中定义一次,其他文件通过关键字引用。
(4)外部变量/函数的作用域:从其定义处开始到其所在(待编译的)文件末尾结束。
(5)头文件:长程序可分割之若干个源文件之中,头文件解决定义和声明文件之间的共享问题。
(6)静态变量:static声明限定外部变量与函数,可将后声明的对象的作用域限定的被编译源文件的剩余部分。也可以声明内部变量,但是一直占据内存空间。
(7)寄存器变量:程序中使用频率比较高,放在寄存器中,使程序更小,执行更快。
(8)初始化:静态变量制造第一次进入程序初始化一次。
(9)递归:自己调用自己。
(10)C预处理器:1)#define;2)#include

5.指针与数组

  指针和地址、指针和指针变量、指针和函数参数、指针与数组、取地址运算符&、字符指针与函数、指针数组和指向指针的指针、指针数组初始化、指针与多维数组、指向函数的指针、命令行参数(并不清楚作用)

(1)指针和地址:指针是一种保存地址的变量。
(2)指针和指针变量:1)指针:变量的地址称为该变量的“指针”;2)指针变量:专门保存另一变量的地址的变量,称为“指针变量”。指针是概念级,指针变量是具体实现。
*:指针运算符
&:取地址运算符
Eg.&a为变量a的地址;*p为指针变量p所指向的变量。

(3)指针和函数参数:使用指针参数传值。
(4)指针与数组:数组名就是指针(数组首地址)。Pa[i]和*(Pa+i)等价;&a[i]和a+i等价。
通过数组和下标实现的表达式可等价地通过指针和偏移量实现。
(5)取地址运算符&:只能用于内存中的对象,即变量和数组元素。
(6)字符指针:字符串常量通常是一个字符数组;字符串常量的存储比双引号中的字符数大1,结尾符‘\0’.
(7)指针数组和指向指针的指针:1)数组指针:类型 *数组名[数组长度说明],eg.int *p[4];2)指向指针的指针:eg.*p等价于(*p),存放另一个(指针)地址的(指针)地址变量。指针数组多用于存放不同长度的字符串。
(8)指向函数的指针:其实就是指向函数编译时候的被分配的入口地址。定义:函数返回值类型 (*指针变量名) ();
(9)指针数组初始化:跟普通数组类似。
(10)指针与多维数组:按存储顺序访问,最右边的数组下标(列)变化最快。
(11)命令行参数:并不清楚作用

6.结构

需求、定义、结构与函数、结构数组、结构指针、自引用结构(类似于递归函数)、联合(共用体)、类型定义

(1)需求:将不同类型数据组合成一个有机整体。
(2)定义:struct 名字{};或 struct 名字{}变量名列表;或 struct{}变量名;
(3)结构与函数:也是通过值传递的。
(4)结构数组:在结构体中可定义数组,引用的时候应该 层层引用。
(5)结构指针:定义eg:struct piont *pp;引用结构成员时候,方式如下:(*pp).x或 pp->x或 结构体变量名.结构成员
(6)自引用结构:类似递归,自己调用自己
(7)共用体(联合):目的是实现一个变量可以合法地保存多种类型的数据其中的一种。但是,只能以最后一次存取的类型有效。
(8)类型定义(typedef):用它来建立新的数据类型名。Eg. Typedef int Length ,将Length定义为与int具有同等意义的名字。
(9)typedef和#define的区别:
typedef:重定义类型的标识符,解决用户自定义数据类型名称的需求,从而丰富数据类型包含的属性信息。
typedef int length ; // 类型定义,结尾有分号“;”,表示将length定义为与int具有同等意义的名字,用于类型定义
#define ARRAYSIZE 100 //宏替换,/结尾没有分号“;”,表示将文中所有的100都用ARRAYSIZE进行替换

7.输入输出
略读。
8.UNIX接口
略读。
附录:需要用时可以快速查找。

二、补充
1.ANSI C规定空参数声明必须用void为显示声明:如,void copy(void)
2.自动变量(局部变量)、外部变量、static、const特点比较:
外部变量必须定义在所有函数之外,且只能定义一次,定以后编译程序为它分配存储单元。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值