如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第9章指针C程序设计中使用指针可以:使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存得到多于一个的函数返回值9.1地址和指针的概念变量与地址i_pointer=&i=&(*i_pointer)i=*i_pointer=*(&i)直接访问与间接访问直接访问:按变量地址存取变量值间接访问:通过存放变量地址的变量去访问变量例k=i;--直接访问k=*i_pointer;--间接访问3例inti;int*p=&i;int*q=p;例main(){inti=10;int*p;*p=i;printf(“%d”,*p);}例指针变量的引用:通过指针变量访问整型变量9.2.3指针变量作为函数参数——地址传递特点:共享内存,“双向”传递09.2.3指针变量作为函数参数——地址传递特点:共享内存,“双向”传递9.2.3指针变量作为函数参数——地址传递特点:共享内存,“双向”传递#include<stdio.h>swap(intx,inty){intt;t=x;x=y;y=t;}main(){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);}#include<stdio.h>/*c9_2_2.c*/swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}main(){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("%d,%d",*pointer_1,*pointer_2);}9.3数组的指针和指向数组的指针变量9.3.1指向数组元素的指针变量9.3.2通过指针引用数组元素指针变量的赋值运算p=&a;(将变量a地址p)p=array;(将数组array首地址p)p=&array[i];(将数组元素地址p)p1=p2;(指针变量p2值p1)例p指向float型数组,若执行p+1则p的值变为p+14指针变量的关系运算若p1和p2指向同一数组,则p1<p2表示p1指向的元素在前p1>p2表示p1指向的元素在后p1==p2表示p1与p2指向同一元素若p1与p2不指向同一数组,比较无意义p==NULL或p!=NULL(判断p是否为零指针)数组元素表示方法例inta[]={1,2,3,4,5,6,7,8,9,10},*p=a,i;数组元素地址的正确表示:(A)&(a+1)(B)a++(C)&p(D)&p[i]例#include<stdio.h>voidmain(){inta[]={5,8,7,6,2,7,3};inty,*p=&a[1];y=(*--p)++;printf(“%d”,y);printf(“%d”,a[0]);}/*c9_3.c*/#include<stdio.h>main(){inti,*p,a[7];p=a;for(i=0;i<7;i++)scanf("%d",p++);printf("\n");for(i=0;i<7;i++,p++)printf("%d",*p);}9.3.3数组名作函数参数数组名作函数参数,是地址传递数组名作函数参数,实参与形参的对应关系例将数组a中的n个整数按相反顺序存放例将数组a中的n个整数按相反顺序存放例将数组a中的n个整数按相反顺序存放例将数组a中的n个整数按相反顺序存放一级指针变量与一维数组的关系int*p与inta[10]数组名是指针(地址)常量若p=a;则p+i是a[i]的地址数组元素的表示方法:下标法和指针法,即若p=a,则p[i]a[i]*(p+i)*(a+i)形参数组实质上是指针变量,即intp[]int*p在定义指针变量(不是形参)时,不能把int*p写成intp[];系统只给p分配能保存一个指针值的内存区(一般2字节);而给array数组分配2*10字节的内存区9.3.4指向多维数组的指针和指针变量1。多维数组的地址对于二维数组:1.a是数组名,包含三个元素a[0],a[1],a[2]2.每个元素a[i]又是一个一维数组,包含4个元素对二维数组inta[3][4],有:a:二维数组首地址,即第0行的首地址a+i:第i行的首地址a[i