Chap8指针8.1寻找保险箱密码8.2角色互换8.3冒泡排序电码加密8.48.5任意个整数求和*
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
本章要点1变量、内存单元和地址之间是任么关系?1如何定义指针变量,怎样才能使用指针变量?什么是指针变量的初始化?■指针变量的基本运算有哪些?如何使用指针操作所指向的变量?■指针作为函数参数的作用是什么?如何使用指针实现函数调用返回多个值?1如何利用指针实现内存的动态分配?
本章要点 ◼ 变量、内存单元和地址之间是什么关系? ◼ 如何定义指针变量,怎样才能使用指针变量? ◼ 什么是指针变量的初始化? ◼ 指针变量的基本运算有哪些?如何使用指针 操作所指向的变量? ◼ 指针作为函数参数的作用是什么? ◼ 如何使用指针实现函数调用返回多个值? ◼ 如何利用指针实现内存的动态分配?
8.1寻找保险箱密码一个关于国安局特工寻找保险箱密码的故事...关键点分析得到线索:地址为2170的房间内有线索提示地址:1976找到目标:地址为1976的房间取出内容:911
8.1 寻找保险箱密码 一个关于国安局特工寻找保险箱密码的故事. 关键点分析 ◼ 得到线索:地址为2170的房间内有线索 ◼ 提示地址:1976 ◼ 找到目标:地址为1976的房间 ◼ 取出内容:911
8.1寻找密码的途径分析密码存放需要一定的存储空间作为存放地,每个存放地都会有地址如果知道了存放地的名字,当然能够找到密码。但并不是每个存储空间都有名字如果不知道存放地的名字,知道该存放地的地址也能够取出密码如果连存放地的地址也不知道,但是有另外一个地方存放了该密码存放地的地址,那么找到这个地方,就能顺藤摸瓜,间接找到密码
8.1 寻找密码的途径分析 ◼ 密码存放需要一定的存储空间作为存放地,每 个存放地都会有地址 ◼ 如果知道了存放地的名字,当然能够找到密码。 但并不是每个存储空间都有名字 ◼ 如果不知道存放地的名字,知道该存放地的地 址也能够取出密码 ◼ 如果连存放地的地址也不知道,但是有另外一 个地方存放了该密码存放地的地址,那么找到 这个地方,就能顺藤摸瓜,间接找到密码
8.1密码存放示意图p911197621701976P名字地址21701976内容9111976
8.1 密码存放示意图 1976 911 P 2170 1976 名字 P 地址 2170 1976 内容 1976 911
例8-1利用指针模拟寻找保险箱IfI know the name of the variable, I can get密码的过程it's value by name: 911IfIknowtheaddress of thevariable获取密码的两种方法is:12ff7c,thenIalso can get it'svalue byint main(void)address:911【intkey=911;/*变量key用于存放密码值911*/int*p_addr=NULL;/*变量p_addr是整型指针变量*/p_addr= &key;/*将key的地址赋给p_addr*/*通过变量key输出密码值*printf("The key is: %din", key);/*通过变量名key输出密码值*printf(lf I know the name of the variable, I can get it's value by name:%din",key);*通过变量key的地址来输出密码值*/printf("lf I know the address of the variable is: %x, then I also can get it'svalue by address: %din",p_addr, *p_addr);return O;1
例8-1 利用指针模拟寻找保险箱 密码的过程 获取密码的两种方法 int main(void) { int key = 911; /* 变量key用于存放密码值911 */ int *p_addr = NULL; /* 变量p_addr是整型指针变量 */ p_addr = &key; /* 将key的地址赋给p_addr*/ /* 通过变量key输出密码值*/ printf("The key is: %d\n", key); /* 通过变量名key输出密码值*/ printf("If I know the name of the variable, I can get it’s value by name: %d\n ", key); /* 通过变量key的地址来输出密码值*/ printf("If I know the address of the variable is: %x, then I also can get it’s value by address: %d\n",p_addr, *p_addr); return 0; } If I know the name of the variable, I can get it’s value by name: 911 If I know the address of the variable is:12ff7c, then I also can get it’s value by address: 911
8.1.2地址和指针一指针的概念内存单元地址内容变量直接访问:通过变量名访问100020xint x = 20, y = 1, z= 155;11002yprintf("%d", x;)1551004z间接访问:通过另一个变量访问把变量的地址放到另一变量中20001000p使用时先找到后者2002再从中取出前者的地址地址指针变量
8.1.2 地址和指针-指针的概念 内存单元 地址 内容 变量 int x = 20, y = 1, z = 155; printf("%d", x;) 直接访问:通过变量名访问 间接访问:通过另一个变量访问 把变量的地址放到另一变量中 使用时先找到后者 再从中取出前者的地址 1000 20 x 1002 1 y 1004 155 z 2000 1000 p 2002 地址 指针变量
指针内存单元int x= 20, y = 1, z = 155;地址内容变量printf("%d", x;)100020x某个变量的地址10021力1551004指向20001000指针变量:存放地址的变量p2002地址指针变量
指针 内存单元 地址 内容 变量 int x = 20, y = 1, z = 155; printf("%d", x;) 1000 20 x 1002 1 y 1004 155 z 2000 1000 p 2002 地址 指针变量 指针变量:存放地址的变量 某个变量的地址 指向
8.1.3指针变量的定义类型名*指针变量名指针声明符指针变量所指向的变量的类型int *p;p是整型指针,指向整型变量float *fp;fp是浮点型指针,指向浮点型变量char*cp;cp是字符型指针,指向字符型变量
指针变量所指向的变量的类型 int *p; p 是整型指针,指向整型变量 float *fp; fp 是浮点型指针,指向浮点型变量 char *cp; cp 是字符型指针,指向字符型变量 类型名 * 指针变量名 指针声明符 8.1.3 指针变量的定义
指针变量的定义类型名*指针变量名int *p;口指针变量名是p,不是*p口*是指针声明符int k, *p1, *p2;等价于:int k;int *p1;int *p2;口定义多个指针变量时,每一个指针变量前面都必须加上*
指针变量的定义 类型名 * 指针变量名 int * p; 指针变量名是 p,不是*p * 是指针声明符 int k, *p1, *p2; 等价于: int k; int *p1; int *p2; 定义多个指针变量时,每一个指针变量 前面都必须加上*