C语言进阶学习笔记 (一)

			C语言进阶学习笔记(1)

(重要的概念过一遍,详细的介绍,后面章节,一一攻克。)
参考书籍:C 语言进阶 :重点、难点与疑点解析 牟海军 著


一:核心概念

1.1 堆栈

栈,是硬件,表现为一种数据结构,先进后出
计算机系统中:栈一般包含2方面信息:
1:函数的返回值和参数
2:临时变量
默认的函数内部变量的压栈操作为 :从上到下、从左向右,采用 4 字节对齐。数组压栈方法略有不同,即从最后一个元素开始,直到起始元素为止,即采用从右向左的方法压栈

堆:是一种动态存储结构,堆内存通过malloc,calloc,realloc 来分配,使用free()来释放。
堆和栈,在使用时生长方向相反,栈向低地址方向生长,堆向高地址方向。

1.2全局变量和局部变量

区别:函数体外定义和函数体内定义
static修饰的静态全局变量只能在源文件使用
extern修饰的外部全局变量,其他源文件也可以调用

1.3生存周期及作用域

1.3.1生存期

指的是,变量占用寄存器或者内存的时长
静态存储区,存放全局变量和静态变量,在执行程序前分配存储空间,占据固定的存储单元。
动态存储区,存放的是函数里的局部变量、函数的返回值、形参等,它在函数被执行的过程中进行动态分配,在执行完该函数时自动释放。由于这种分配和释放都是每次执行到函数时进行的,因此前后两次调用同一个函数,其临时变量分配到的地址可能是不同的

1.3.2存储类别及相应变量

auto:未定义的默认为auto,可以省略
register 存放在寄存器中,提高运行效率,适用于多次调用的变量。只有局部变量才可以定义为寄存器变量
static 静态变量. 生存周期从程序开始到程序结束
extern 外部变量

1.3.3 作用域

可以使用{}来限制作用域
同名变量作用域

1.4内部函数和外部函数

static 和 extern修饰的函数,分别为内部函数和外部函数,默认为外部函数
若该函数只需要在本文件内使用,加上static,避免和其他文件重名的风险

1.5指针变量

指针变量存放的是对象的地址,可以理解为指向该类型变量的起始地址。指针变量的大小,在32位系统中,为4个字节。
在这里插入图片描述
a 和&a指向的变量类型是不同的:
a指向的是一个int型变量,所以a+1的地址变化了4个字节。a 等价于 &a[0]
&a 指向的是 int [10]变量,可以把上述数组变形为:int (&a)[10],故&a+1 变化了104个字节

1.6 指针数组和数组指针

int * p[8] 指针数组
根据优先级,p先与[] 结合,p的本质是数组,数组元素的类型为int * ,所以p指向了元素为int*的数组

int (p)[8] 数组指针
p 与
优先结合,p的本质为指针,指向数组首个元素的地址的指针,指向元素类型为 int[8]

1.7指针函数&函数指针

int * func(…)
指针函数,func本身为一个函数,返回值为int*类型的指针

int (*func)(…)
函数指针:func 本质为一个指针,指向一个函数的入口地址

1.8传值和传址

传值不影响实参,只是拷贝值到函数形参
传址 影响实参,传的是实参的地址

1.9递归和嵌套

嵌套就是在一个函数中调用另一个函数,函数是平行关系,不可在函数中定义另一个函数。
递归就是,函数调用自己,需要设置一个停止条件,递归调用朝着停止目标发展且停止条件一定能实现,不然就会无限调用下去,直至崩溃。

1.10结构体 &1.11 共用体

struct & union
区别:1:结构体每个成员都有各自的内存空间,共用体是共用同一个内存空间;
2:结构体内存大小为各自成员的和,共用体为占最大内存的成员的内存大小。
3:结构体每个成员的起始地址不同,共用体每个成员的起始地址相同

1.12枚举

enum 是有序类型,默认成员从0开始,后面比前面大1。
同一个作用域内,不能出现同名的枚举常量名。

1.13位域

很少用到,跳过

作业

练习案列代码

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值