8.1 密码开锁
- 地址和指针
- 一般以变量所在的内存单元的第一个字节的地址作为他的地址
- NULL的值为0,代表空指针
- 指针变量的定义
- 类型名 *指针变量名
- 类型名指定指针变量所指向变量的类型
- 指针声明符*在定义指针变量时被使用,说明被定义的那个变量是指针
- 指针变量要先赋值再使用
p = &i;
p = 0;
p = NULL; // 空指针不指向任何单元
p = (int *)1732;
- 指针的基本运算
- 相同类型的指针能进行复制、比较和算数运算
8.2 角色互换
- 指针作为函数的参数
- 在实参和形参之间的数据传递是单向的值传递方式,调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指向的变量的值
- 只要在函数中改变*p的值,就改变了该存储单元的内容
冒泡排序
数组一旦被定义后内存空间就会被分配,也就是说数组名所代表的地址是不能改变的
- 指针、数组和地址间的关系
- 数组的基地址是在内存中存储数组的起始位置,他是数组中第一个元素的地址,因此数组名本身是一个地址及指针值
- 指针是以地址作为值的变量,而数组名的值是一个特殊的固定地址,可以把它看作是指针常量
- 不能改变指针常量a的值
- 指针每一次加一减一,是加上或减去该指针所指向的那个变量数据类型的长度,即它所指向的存储单元所占用的字节数
- 数组名可以使用指针形式,而指针变量也可以转换为数组形式
- 指针相减表示他们两个之间数组元素的个数
p = a;
sum = 0;
for (i = 0; i < 100; i++)
{
sum += p[i];
}
- 数组名作为函数的参数
- 当进行参数传递时,主函数传递的是数组a的基地址,数组元素本身不被复制
字符串压缩
- 字符串和字符指针
- 字符串常量是用一对双括号括起来的字符序列,通常被看作一个特殊的一维字符数组
- 系统在存储一个字符串是先给定一个起始地址,连续存放该字符串中的字符
- 常用的字符串处理函数
- 字符串的输入输出
- scanf
- printf
- gets
- puts
- 字符串的输入输出
- 字符串的复制,连接和比较及其计算字符串长度的函数
-
字符串复制函数
char *strcpy(char *s1, char *s2
,把字符串s2复制到s1。 -
字符串连接函数
strcat(s1, s2)
s2接到s1后面 -
字符串比较函数
strcmp(s1, s2)
-
字符串长度函数
strlen(s1)
-
- 在应用标准库中的任何函数前,必须要提供函数原型
#include <string.h>