如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第7章指针回顾教学目标为什么引入指针指针的作用程序中:inti;floatk;指针也是一个变量,只不过该变量中存储的是另一个对象的内存地址如果一个变量存储另一个对象的地址,则称该变量指向这个对象由于指针值是数据,指针变量可以赋值,所以一个指针的指向在程序执行中可以改变。指针p在执行中某时刻指向变量x,在另一时刻也可以指向变量y指针变量声明指针变量初始化指针变量的使用零指针和空类型指针与指针相关的运算符与指针相关的运算符*与&的关系访问方式访问方式访问方式指针变量的命名规则和其他变量的命名规则一样指针不能与现有变量同名若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址应为指针指定一个地址后,才能在语句中使用指针指针的特点inti,*p;p=&i;指针的指向共性在内存中占据一定大小的存储单元先定义,后使用特殊性它的内容只能是地址,而不能是数据必须初始化后才能使用,否则指向不确定的存储单元,对该空间进行访问,将可能造成危险可参与运算:加、减一个整数,自增、自减、关系、赋值只能指向同一基类型的变量指针使用示例指针使用示例intx,*ptr_x,*ptr_y;ptr_x=&x;ptr_y=ptr_x;指针的使用int*ptrnum,arr_num[8];ptrnum=&arr_num[0];ptrnum++;将指针加上或者减去某个整数值指针变量的运算swap(intx,inty){inttemp;temp=x;x=y;y=temp;}intmain(){inta,b;scanf("%d,%d",&a,&b);if(a<b)swap(a,b);printf("\n%d,%d\n",a,b);return0;}“地址传递”:共享内存,“双向”传递swap(intx,inty){intt;t=x;x=y;y=t;}intmain(){inta,b;int*pointer_1,*pointer_2;scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if(a<b)swap(*pointer_1,*pointer_2);printf("\n%d,%d\n",a,b);return0;}运行结果:5,9指针变量作为函数参数一个数组存储在一块连续内存单元中;数组名就是这块连续内存单元的首地址;第(i+1)个数组元素的地址可表示为&data[i]或(data+i)。可以通过以下方式为指向数组的指针赋值:inta[10];pa=&a[0];//或者pa=a;一个指针变量可以指向一个数组元素int*ptr,data[10];ptr=data+3;//或者ptr=&data[3]#include<stdio.h>intmain(void){int*ptrnum1,*ptrnum2;intvalue=1;ptrnum1=&value;value+=10;ptrnum2=&value;if(ptrnum1==ptrnum2)printf("\n两个指针指向同一个地址\n");elseprintf("\n两个指针指向不同的地址\n");return0;}数组元素表示方法数组元素引用方法数组元素地址表示方法注意指针的当前值指向数组的指针示例指向数组的指针示例数组名做函数参数数组名做函数参数数组名做函数参数数组名做函数参数数组名做函数参数指针变量与一维数组的关系指针与二维数组指针与二维数组指针与二维数组指针与二维数组指针与二维数组指向二维数组元素的指针变量指向一维数组的指针变量指向一维数组的指针变量二维数组与指针运算二维数组的指针做函数参数二维数组的指针做函数参数二维数组的指针做函数参数二维数组与一维数组指针变量的关系字符串表示形式用字符数组实现例intmain(){char*string="IloveChina!";printf("%s\n",string);string+=7;while(*string){putchar(string[0]);string++;}return0;}字符串指针作函数参数char*cp;与charstr[20];str由若干元素组成,每个元素放一个字符;而cp中存放字符串首地址charstr[20];str="IloveChina!";()char*cp;cp="IloveChina!";()str是地址常量;cp是地址变量cp接受键入字符串时,必须先开辟存储空间字符串与数组的关系charstr[]={"Hello!"};()charstr[]="Hello!";()charstr