




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1001000010300 xyz多级指针的指向关系多级指针的指向关系变量变量x x的值为的值为100100变量变量x x的存储首址为的存储首址为1000010000变量变量y y的存储首址为的存储首址为10300103001001000010300y10000 x10500 z10300int x=100,*y,*z; /定义整型定义整型变量、整型的一级指针变量和二级指变量、整型的一级指针变量和二级指针变量针变量*/y=&x; /*一级指针变量一级指针变量y指向整型指向整型变量变量*/z=&y; /*二级指针变量二级指针变量z指向一级指向一级指针变量指针变量y*/int x,
2、*y=&x,*z=&y;*y x;*z y;*z *y x比较比较#include void main() int x=100,*y,*z; y=&x; z=&y; printf(*y就是就是x:*y=%d,x=%dn,*y,x); printf(*z就是就是x:*z=%d,x=%dn,*z,x);程序运行的结果为:程序运行的结果为:*y就是就是x:*y=100,x=100*z就是就是x:*z=100,x=100paa 0*pa ia 1a 2a 3*(p+1)*(p+2)*(p+3)*(p+i)数组数组元素元素指针指针变量变量int a10,*p;p=&
3、;a0;/*指针总是指指针总是指向数组的第一个元素向数组的第一个元素*/或者或者p=a;/*数组名表示数组数组名表示数组的起始地址的起始地址*/数组元素与指针数组元素与指针变量之关系变量之关系:*p=ai=图示为一维数组图示为一维数组与指针的关系与指针的关系p &ai *p ai a int a10,*p;p=&ai; p指针变量与数组元素指针变量与数组元素等价的地址表示形式等价的地址表示形式 等价的元素表示形式等价的元素表示形式 &ai ai a+i *(a+i) p+i *(p+i) a int a10,*p; p=&a0; 或或p=a; p00000000
4、00a0 a1 a2 a3 a4 a5 a6 a7 a8 a9p1 p2p1100p2p22000200p1p21000int a10=0,int a10=0,* *p1=a,p1=a,* *p2=a;p2=a;p1+=3;p1+=3;* *p1=100p1=100; ;p2=&a9;p2=&a9;p2-=3;p2-=3;* *p2=200;p2=200;p1-; p1-; p2+; p2+; * *p1=1000;p1=1000; * *p2=2000;p2=2000;23456789101a0 a1 a2 a3 a4 a5 a6 a7 a8 a9p1p25 5个整型数据个整
5、型数据(2020个字节)个字节)例例6-2 6-2 随机生成一个数组的所有元素,并用指针移动的方式输出这些元素值。随机生成一个数组的所有元素,并用指针移动的方式输出这些元素值。 #include #include #include #define N 10void main()int aN,i,*p;srand(time(NULL);for(i=0;iN;i+)ai=rand()%100;p=a; /*使指针指向数组的第一个元素,相当于初始化使指针指向数组的第一个元素,相当于初始化a0*/for(i=0;iN;i+,p+)printf(%4d,*p);printf(n);p=a;printf(
6、%4d,*p);for(i=0;iN ;i+) p+; printf(%4d,*p); N-1例例6-3 使用不同的指针形式引用一维数组元素示例。使用不同的指针形式引用一维数组元素示例。/* Name: ex06-03.cpp */#include void main()int a5,i,*p;printf(第一次输入数据第一次输入数据,使用指向数组的指针表示元素地址使用指向数组的指针表示元素地址:n);p=a;for(i=0;i5;i+) scanf(%d,p+i); /*使用指向数组的指针变量输入数组元素值使用指向数组的指针变量输入数组元素值*/for(i=0;i5;i+) printf(
7、%5d,ai); /*使用数组元素形式输出数组值使用数组元素形式输出数组值*/printf(n);for(i=0;i5;i+) printf(%5d,*(p+i); /*使用指向数组的指针变量输出数组值使用指向数组的指针变量输出数组值*/printf(n);printf(第二次输入数据第二次输入数据,使用数组名表示元素地址使用数组名表示元素地址:n);for(i=0;i5;i+) scanf(%d,a+i); /*使用数组名输入数组元素值使用数组名输入数组元素值*/for(i=0;i5;i+) printf(%5d,ai); /*使用数组元素形式输出数组值使用数组元素形式输出数组值*/prin
8、tf(n);for(i=0;i5;i+) printf(%5d,*(a+i); /*使用数组名输出数组值使用数组名输出数组值*/printf(n);例例6-4 使用选择排序法将一组数据按降序排列,要求使用选择排序法将一组数据按降序排列,要求被排序数组用随机函数生成,排序功能在自定义函数被排序数组用随机函数生成,排序功能在自定义函数内进行实现,并且要求函数的数组类形式参数和函数内进行实现,并且要求函数的数组类形式参数和函数中对数组的操作都使用指针变量形式。中对数组的操作都使用指针变量形式。 /* Name: ex06-04.cpp */#include #include #include #de
9、fine N 10void sort(int *v,int n);/*排序函数排序函数*/void MakeArray(int *v,int n); /*数组生成函数数组生成函数*/void PrintArray(int *v,int n); /*数组输出函数数组输出函数*/void swap(int *v,int x,int y); /*数组元素交换函数数组元素交换函数*/void main()int aN;MakeArray(a,N); /*随机生成函数随机生成函数*/printf(Before Sort:n);PrintArray(a,N); /*数组输出函数数组输出函数*/sort(a
10、,N); /*排序函数排序函数*/printf(After Sort:n);PrintArray(a,N); /*数组输出函数数组输出函数*/void MakeArray(int *v,int n) /*随机生成函数随机生成函数*/int i; srand(time(NULL);for(i=0;in;i+) *(v+i)=rand()%1000; /* *(v+i)相当于相当于ai*/void PrintArray(int *v,int n) /*数组输出函数数组输出函数*/int i;for(i=0;in;i+) printf(%5d,*(v+i); printf(n); void swap
11、(int *v,int x,int y) /*两数交换函数两数交换函数*/int t;t=*(v+x); *(v+x)=*(v+y); *(v+y)=t; void sort(int *v,int n) /*排序函数排序函数*/int i,j,k;for(i=0;in-1;i+)k=i;for(j=i+1;j*(v+k)k=j;if(k!=i) swap(v,i,k);每次移动过一行元素每次移动过一行元素每次移动过一个元素每次移动过一个元素二维数组首地二维数组首地址表示形式:址表示形式:a(二级地址二级地址)&a00a0*aa(一级地址一级地址)pp1a例例6-5 使用不同的指针形式引
12、用二维数组元素示例。使用不同的指针形式引用二维数组元素示例。pa*(p+1)*(p+1)+2a12例例6-6 使用指向由若干个元素组成的一维数组的指针处理二维数组。使用指向由若干个元素组成的一维数组的指针处理二维数组。#define ROW 4#define COL 5Void main()void MakeArray(int *v, int m,int n);void PrintArray( int *v,int m,int n);Int aROWCOL,i,j,(*p)COL;MakeArray(a0,ROW,COL);PrintArray (a0,ROW,COL);for(p=a,i=0
13、;iROW,i+) for(j=0;jCOL;j+0)printf(“%6d”, *(*(p+i)+j);void MakeArray(int *v,int m,int n);int i,j; srand(time(NULL);for(i=0;im;i+) for(j=0;jn,j+) *(v+i*n+j)=rand()%1000;或或*(pi+j)例例6-7 指向若干个元素组成的一维数组指针变量作函数形式参数(求二维指向若干个元素组成的一维数组指针变量作函数形式参数(求二维数组中全部元素之和)。数组中全部元素之和)。#include #define ROW 4#define COL 5Voi
14、d main() int add(int (*a)COL, int m,int n); int aROWCOL=1,2,3,4,5,6,7,8,9,10,11,12; printf(“sum=%dn”, add(a, ROW,COL); int add(int (*a)COL, int m,int n); int i,j,sum=0; for(i=0;im;i+) for(j=0;jn;j+) sum+=*(ai+j); return sum; 形参为指向若干个元形参为指向若干个元素组成的一维数组指素组成的一维数组指针变量针变量实参实参或或*(*(p+i)+j)pabp1xy例例6-8 用一维
15、指针数组处理二维数组示例用一维指针数组处理二维数组示例。例例6-8 用一维指针数组处理二维数组示例用一维指针数组处理二维数组示例。.#define ROW 3#define COL 5void main()void MakeArray(int *v,int m,int n); int aROWCOL,i,*p3; MakeArray(a0,ROW,COL); for(i=0;iROW;i+)/指针数组指针数组p的各元素依次指向二维数组的各元素依次指向二维数组a的每一行起始地址的每一行起始地址 pi=ai; /相当于初始化相当于初始化p,ai是行指针是行指针 for(i=0;iCOL;i+) p
16、rintf(%5d,*(p1+i);/指针指针p1指向二维数组第指向二维数组第2行行a1 printf(n);void MakeArray(int *v,int m,int n)int i,j;srand(time(NULL);for(i=0;im;i+)for(j=0;jn;j+)*(v+i*n+j)=rand()%1000;for(i=0;im;i+) for(j=0;jn;j+) *(v+i*n+j)=rand()%1000; printf(%4d,*(v+i*n+j); printf(n); 如果要把这个数组打印出如果要把这个数组打印出来,再打印第二行呢?来,再打印第二行呢? 78 9
17、8 3 -1 100 98 -1 88 -1 99 88 -1 100 78 33 65 -1 pgradstu1stu2stu3stu4stu5#include void main() int stu1=78,98,73,-1,stu2=100,98,-1,stu3=88,-1, stu4=100,78,33,65,-1,stu5=99,88,-1; int *grad=stu1,stu2,stu3,stu4,stu5,*p=grad,i; for(i=1;i=0)/*当取出的数组元素值不是当取出的数组元素值不是-1时时*/ printf(%4d,*p);(*p)+; /*指针变量指针变量*
18、p移动指向当前数组的下一个数组元素移动指向当前数组的下一个数组元素*/ p+; /*指针变量指针变量p移动指向下一个指针数组元素移动指向下一个指针数组元素(即下一个一维数组即下一个一维数组)*/printf(n); argv0argv1argv2“echo.exe”“file1.txt”“file2.txt”例例6-10 命令行参数的获取示例。命令行参数的获取示例。/* Name: ex06-10.cpp */#include void main(int argc,char *argv)while(-argc0)printf(%s%c,argvargc,(argc1? :n);例如,我们在命令行键入例如,我们在命令行键入ex06-10 abc 123 结果为结果为 123 abc此时:此时:argc=3, argc0 ex06-10, argc1 abc,argc2 123, 则程序执行过程如下则程序执行过程如下:第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未交就业协议书
- 车房转让协议书合同
- 款项代收协议书
- 水井共用协议书
- 遗嘱房产继承协议书模板
- 车库钢构改造合同协议
- 道歉协议书格式
- 速卖通运营合同协议
- 车辆无偿租赁合同协议
- 辛硫磷批发供货合同协议
- (完整版)韩国商法
- 2024中国南水北调集团东线有限公司招聘笔试参考题库含答案解析
- 2024春期国开电大思政课《中国近现代史纲要》在线形考(专题检测一至八)试题及答案
- 2024年上海市行政执法类公务员招聘笔试参考题库附带答案详解
- 全过程工程咨询服务项目管理服务方案
- 复方氨基酸注射液(17AA-II)-临床用药解读
- 客房服务员:高级客房服务员考试题
- 贫血中医辨证分析
- PLC的故障排除与维护技巧与方法
- 2019版新人教版高中英语必修+选择性必修共7册词汇表汇总(带音标)
- 跨行业合作与创新
评论
0/150
提交评论