Day1
Q1: C程序的编译运行过程
Q2: 浮点型的差异表示
p27
计算机对浮点数的输出结果取决于计算机内部所采用表示浮点数的格式,由于计算机存储精度有限,无法表示完全表示浮点书的小数部分.
其他
程序与算法的概念
程序: 解决某具体问题的计算机指令集合.
算法: 解决某具体问题的方法.
浮点数的除法
C语言中整数与整数相除得到剔除余数后的浮点数,但整数与浮点数相除可以得到完整的小数.
Day2
Q1: C数组的创建和访问
声明
type name[capacity]
声明并初始化
type name[capacity] = {.....}
访问
type variable = name[index]
通常使用for/while循环进行遍历数组
结构设想图
Q2: 声明变量时的const修饰词有什么作用?
p111
const修饰词对程序运行期间不会发生变化的变量进行标记,来告诉编译器在编译过程中将该变量分配在只读内存中,不允许修改,只能访问原来的值.
Q3: static 修饰变量时有什么作用
p156
将变量明确为静态变量,执行过程中只会初始化一次(程序开始时优先初始化),并且不会随着函数的调用和退出发生变化,值保留为上一次所使用的结果.
Other
条件操作符
条件操作符即三目操作符的从右向左的关联规则
e1 ? e2 : e3 ? e4 : e5
编译结果为
e1 ? e2 : (e3 ? e4 : e5)
C语言的if-else判断规则
所有非零表示满足条件,零为不满足条件
Day3
Q1: 如何理解递归解决问题
p159
将一个问题用�同样的步骤分解成越来越小的问题子集,最终得出答案.
常见应用场景就是多层嵌套括号的表达式求值, 树和表的搜索和排序.
理解自己调用自己的过程也可以看做自己调用了另外一个等待返回结构的函数
Q2: 结构体的初始化和使用
// 先声明后定义
struct Name {
type a,
type b,
type c
}
struct Name struct1;
struct Name struct2;
// 声明并定义
struct Name {
type a,
type b,
type c
} struct1,struct2 = {value1, value2, value 3}
结构体语法
// 访问结构体内部成员值
struct1.a
//快速赋值
struct1 = { .a =value1, .b = value2, .c = value3}
或
struct1 = (struct Name) {value1, value2, value3}
Q3: 字符串创建使用
创建方式
1- char name[] = "abc....."
2- char name[] = {'a', 'b', 'c', ..... '\0'}
使用注意
- \0 为null字符即空字符,用于让编译器识别字符串的末尾位置,默认存在每个字符串的最后.
- 需要访问字符串中末位有效字符时,要将字符传长度-1作为索引值
其他
C函数
- 在不显示写明返回类型的情况下, C函数的默认返回
Int
类型结果,函数若无返回最好给函数写明返回类型为Void
- 结构体作为函数参数进行传递时,此采用值拷贝传递,新拷贝的结构体值得变化不会影响原来的结构体
- 数组作为函数参数进行传递时, 所发生拷贝传递的是数组所在的内存地址,传递后对形参数组的任何操作,实际上就是对原数组的操作.
Day4
Q1: 怎么理解和使用指针
声明
type * pointer
指针相关运算符
*
指针运算符 : * p
表示对指针变量的值进行访问;
&
地址运算符 : &variable
表示对该变量所在内存地址进行访问;
指针变量与内存地址关系图
const修饰指针变量
-
const type *point = variable
: "point指向一个某类型的常量" 表示point所指向的variable值不可变, 允许指向其他地址. -
type * const point = variable
: "point是一个指向某类型的指针常量" 表示point所指向的地址不可变, 此写法更加常用.
函数指针
表示�指向某一函数的指针,必须表明函数的返回值,函数的参数:
returnType (* point)(type args...)
由于运算符优先级,中间括号不能省略.
指针与数组
C语言默认将没有下标的数组名作为指向数组的指针,并且指向数组的第一个元素,除此之外 数组元素的另外种方法获取
*(�value + i) 等价于 value[i]
;