如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第8章善于利用指针内存是计算机内的存储部件,所有指令和数据都保存在内存里。存取速度快,但是掉电即失。可以随机访问。只要指明要访问的内存单元的地址,就可以立即访问到该单元。地址是一个无符号整数,其字长一般与主机相同。内存中的每个字节都有唯一的一个地址。地址按字节编号,按类型分配空间。寻址方式一、基本概念--地址2、数据在内存中的存储定义变量-->分配内存单元(将变量名转换为地址)-->赋值内存中数据的存储(1)内存中数据的存储(2)内存中数据的存储(3)内存中数据的存储(4)3、数据的读写根据变量的地址-->读写内存单元的内容4、指针(pointer)——变量的地址5、直接访问:根据变量地址存取变量值变量地址内存单元6、间接访问:根据指针变量存取变量值指针变量变量地址内存单元inti=1;二、指针变量—(1)2、指针变量的定义:数据类型*指针变量名[=初始值];例:(1)int*point;定义了一个指针变量point,简称指针point。point是变量,int*是类型。(2)inta,*p=&a;p为指向整型变量的指针,p指向了变量a。(3)char*s=NULL;s为指向字符型变量的指针,p指向一个空地址。(4)float*t;t为指向单精度浮点型变量的指针。必须先将指针与变量的地址相关联,然后才能使用指针。关联方式:①初始化;②赋值赋值格式:<指针变量名>=&<普通变量名>;例如:inti,*p;p=&i;或:inti,*p=&i;——→初始化方式关联结果:指针p指向了变量i(变量i的地址赋给了指针p)。若:int*p=NULL;则表示p不指向任何存储单元。指针变量初始化p=&a;指针变量的类型决定了它所能指向的变量的类型inti,*p;p=&i;3、两个指针运算符:&*&:取地址p=&i;*:指向j=*p;(*p——代表p所指变量的值)&用来取变量的地址inti,*p;p=&i;int*p,a[10];p=a;int*p,a[10];p=&a[0];int*p,a[10];p=&a[5];指针变量的引用例2(1):阅读程序,分析程序错误的原因。#include<stdio.h>main(){int*p,*s,a;a=*p+*s;printf("a=%d\n*p=%lu\n*s=%lu",a,p,s);}例2(2):阅读程序,分析程序错误的原因。#include<stdio.h>main(){int*p,*s,a;*p=1;*s=2;a=*p+*s;printf("a=%d\n*p=%lu\n*s=%lu",a,p,s);}例2(3):阅读程序。#include<stdio.h>main(){int*p,*s,a;p=(int*)malloc(sizeof(int));s=(int*)malloc(sizeof(int));*p=1;*s=2;a=*p+*s;printf("a=%d\n*p=%lu\n*s=%lu",a,p,s);}例2(4):阅读程序。#include<stdio.h>main(){int*p,*s,a;p=(int*)malloc(sizeof(int));s=(int*)malloc(sizeof(int));*p=1;*s=2;a=*p+*s;printf("a=%d\n*p=%lu\n*s=%lu",a,*p,*s);}4、指针变量作函参指针既然是数据类型,自然可以做函数参数和返回值的类型。若函数的参数类型为指针类型,则实参与形参的传递是一种“传址”方式。如果函数中有对形参值的改变,实际上也就是修改了实参的值。将变量的地址传给函数,可获得多个返回值。举例:交换两个变量的值1234指针变量与其它类型变量的对比voidSwap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}主调函数主调函数简单变量作函数参数与指针变量作函数参数的比较简单变量作函数参数与指针变量作函数参数的比较swap函数的几种错误形式(1/3)swap函数的几种错误形式(2/3)swap函数的几种错误形式(3/3)交换两变量(1)对1交换两变量(2)无法交换1交换两变量(3)无法交换1交换两变量(4)运行错1三、指向数组的指针变量2、指向数组的指针变量p=a;3、指向数组元素的指针变量p=&a[i];4、通过指针引用数组元素例:inta[10],*p;p=a;*(p+i)==*(a+i)==a[i]指针与数组输入输出一维数组的全部元素利用指针引用数组元素(1)算术运算int*p,a[1