成都理工大学-C++程序设计-第5章指针(3).ppt
****指针数组数组指针指针与字符串二级指针内存动态分配**1.指针数组多个同类指针可以构成数组。每个数组元素为一个指针变量,且在内存中连续存放。(1)指针数组的说明格式:type数组名[constantexp];如:int*p[3];p[0]p[1]p[2]inti,a[3][4],*p[3];for(i=0;i3;i++)p[i]=a[i];*(p[i]+j)=2;/*通过指针数组引用数组元素a[i][j]*/*或为:int*p[3]={a[0],a[1],a[2]};a[0]a[1]a[2]**1.指针数组指针数组引用数组元素的方法如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int*p[3]={a[0],a[1],a[2]};a[0]a[1]a[2]a[i][j]*(a+i)[j]*(*(a+i)+j)*(a[i]+j)数组名法a[i][j]*(p+i)[j]*(*(p+i)+j)*(p[i]+j)指针数组法p[i][j]比较两种方法!!****指针数组与二维数组#includestdio.hintmain(void){inti,j;inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int*p[3]={a[0],a[1],a[2]};for(i=0;i3;i++){for(j=0;j4;j++)printf(“%5d”,*(p[i]+j));printf(“\n”);}return(0);}通过指针数组按数学方式输出数组的值。例:123456789101112p[0]p[1]p[2]a[0]a[1]a[2]****指针数组与二维数组将5个字符串倒序输出#defineN5#includestring.h#includestdio.hintmain(void){ inti,j;char*str[]={monitor, landscape, paddle, partition, current };for(i=1;iN;i++);for(j=--i;j=0;j--)puts(str[j]);return(0);}例:输出结果:currentpartitionpaddlelandscapemonitor思考:使用指针数组描述多个字符串与使用二维数组存储字符串的区别??****指针数组数组指针指针与字符串二级指针内存动态分配**2.数组指针数组指针是指向由n个元素组成的一维数组的指针变量,又称为“行指针”。行指针的说明格式:type(*数组名)[constantexp];如:int(*p)[3];inti,a[3][4],(*p)[4];p=a;注意区别:int*p[3];当行指针正确指向数组后,引用数组元素的方法同指针数组。每行元素个数**2.数组指针通过数组指针(行指针)引用二维数组元素的方法。*(p[i]+j)=2;/*通过数组指针引用数组元素a[i][j]*/a[i][j]*(a+i)[j]*(*(a+i)+j)*(a[i]+j)数组名法a[i][j]*(p+i)[j]*(*(p+i)+j)*(p[i]+j)数组指针法p[i][j]****行指针与二维数组阅读如下程序,说明程序功能【例】#includestdio.h#defineM3#defineN4intmain(void){intj,k,flag;intscore[M][N]={{62,35,67,95}, {95,85,98,73},