C语言复习9
C语言学习,在这里推荐浙江大学翁恺老师的视频,慕课网网址:https://www.icourse163.org/learn/ZJU-9001?tid=9001#/learn/content
。笔者的复习笔记也主要是根据该视频进行。本文的主要内容如下
- 程序设计与C语言
- 计算
- 判断
- 循环
- 循环控制
- 数据类型
- 函数
- 数组
- 指针
指针;指针运算;上机9; - 字符串
- 结构类型
- 程序设计
- 文件
- 链表
refer
1.
9.1 指针
一、取地址运算符
取地址运算符为&
,符号后面只可跟一个变量,用于寻找该变量的地址。
二、指针变量
指针变量的定义如int *p = 0;
。该变量p就是一个指针变量,它的值是内存的地址。
指针的最大作用在于,其可以作为参数传给函数,以此保证在函数体内部还能访问该变量。
*
也叫解地址运算符,用于得到指针变量指向的内存地方存储的值。*
和&
是相反的作用。如下所示:
三、指针应用场景
交换两个变量的值
函数返回值
四、指针与数组
函数参数表中的数组实际上是指针,指针变量也可以用[]
进行运算。以下是函数等价举例:
故符号[]
和*
有异曲同工之妙。
数组变量是const的指针,所以不能被直接赋值int a[] <=> int * const a
五、指针和const
const和指针存在两种关系,指针不能修改,通过指针不能修改。
-
指针不能修改
int * const p = &i;
意思是指针不能修改。一旦该指针得到了某个变量的地址,就不能再指向其他变量了。
常用于:数组。
-
通过指针不能修改
const int *p = &i;
意思是通过指针不能修改变量(并不使得那个变量成为const)。
常用于:在函数传参时希望用户只有访问权限,无修改权限的时候可以使用。
9.2 指针运算
一、指针运算
无论指向什么类型,所有指针的大小都是一样的,因为都是地址。不同类型的指针只是在做例如*p++
的运算的时候,一次性跳动的字节数不同罢了。
void *
是无类型指针,指针类型也可以强制转换。
二、动态内存分配
int *a = (int *) malloc ( n*sizeof(int) );
因为malloc
申请出来的指针默认是void *
类型,所以在此处进行了强制转换。
申请后的空间需要归还给系统,使用free(a)
。记住要在同一个地方malloc和free。