资源简介 (共17张PPT)C 语言程序设计2023翻转课堂实用教程9.3 指针与数组123采用指针访问数组指针间的比较运算知识点指针与数组案例分析案例分析指针与数组相关练习题练习题9.3.1 指针与数组知识点数组名:数组的首地址,第一个元素的地址。若数组array元素类型为Type,则array值就和&array[0]一致,array的类型为Type*类型的指针常量。系统在为数组分配一块连续的内存空间后,数组的首地址就已经确定了,除非销毁,不会改变,所以为指针常量。为什么数组名是一个指针常量?9.3.1 指针与数组知识点举例:int *p, array[5] = {30,20,50,10,40};p = array;p的值为&array[0],*p 为 array[0]p+i表示相对于当前指针p往后偏移i个整数的位置(1)采用指针访问数组array[0] array[1] array[2] array[3] array[4]30 20 50 10 40array array+1 array+2 array+3 array+4p p+1 p+2 p+3 p+49.3.1 指针与数组知识点(1)采用指针访问数组采用指针获取数组元素、地址的方式元素获取内容 array[0] array[1] array[2] array[3] array[4]获取元素的值 array[0] *array *p p[0] array[1] *(array+1) *(p+1) p[1] array[2] *(array+2) *(p+2) p[2] array[3] *(array+3) *(p+3) p[3] array[4]*(array+4)*(p+4)p[4]获取元素的地址 &array[0] array p &array[1] array+1 p+1 &array[2] array+2 p+2 &array[3] array+3 p+3 &array[4]array+4p+4参见9.3.2章节中案例9.3.1的代码及运行结果数组名可以作为指针来使用,指针变量可以作为数组形式来使用。9.3.1 指针与数组知识点(1)采用指针访问数组指针变量与数组名,两者有什么区别呢?(1)p为指针变量,数组array是指针常量。p = array+i,array = array + i。(2)作为sizeof运算符的操作数时sizeof(array):为array所代表的整个数组占用的总字节数。sizeof(p):为p指针占用的字节数数组名不可以作为赋值=左边的操作数。9.3.1 指针与数组知识点(1)采用指针访问数组举例:int array[5] = {30,20,50,10,40},*p = array+2;p-1 是?p+2是?利用指针p,可以随机从某一个元素开始往前往后访问数组元素。array[2]前面一个元素,p-1 为 &array[1]p+2 为 &array[4]9.3.1 指针与数组知识点(2)指针间的比较运算当两个指针均指向同一个数组中的元素时,两个指针可以进行两类运算:关系运算: > < ≠相减的运算9.3.1 指针与数组知识点(2)指针间的比较运算举例:int array[5] = {30,20,50,10,40};int *p1 = &array[3], *p2 = array, *p;30 20 50 10 40arrayp1p2① 以下式子成立:p1 > p2、p2 < p1、p1≠p2p1-p2 为 3基于上面的比较运算,使用指针p作为循环变量,p:[array,&array[4]],p++,可以遍历数组array的所有元素。for(p=array;p<=&array[N-1];p++){printf("%d ",*p);}或for(p=array;pprintf("%d ",*p);}9.3.2 指针与数组案例分析案例9.3.1 指针与数组关系的应用#include#define N 10int main(){int *p,array[N],i;p = array;for(i=0;iscanf("%d",array+i);}//输出元素的地址,每两个一行for(i=0;iprintf("%#X ",(array+i));if((i+1)%2 == 0 && i!=9) printf("\n");}printf("\n");//三种通过p指针来获取元素值的代码for(i=0;iprintf("%d ",*(p+i));}printf("\n");for(i=0;iprintf("%d ",p[i]);}printf("\n");for(p=array;p<=&array[N-1];p++){printf("%d ",*p);}return 0;}运行结果:23 10 4 5 8 9 13 57 28 61↙0X62FDE0 0X62FDE40X62FDE8 0X62FDEC0X62FDF0 0X62FDF40X62FDF8 0X62FDFC0X62FE00 0X62FE0423 10 4 5 8 9 13 57 28 6123 10 4 5 8 9 13 57 28 6123 10 4 5 8 9 13 57 28 619.3.2 指针与数组案例分析案例9.3.2 编写函数求解数组a中的最大元素值,并验证函数的正确性。#include/*入参int a[]等价与 int *a,为一个整型指针变量*/int getMin( int a[],int n){ /*等价于int getMin( int *a,int n)*/int i,min = a[0];for(i=1;iif(min > a[i]) min = a[i];}return min;}int main(){int array[9] = {3,5,2,9,6,8,7,4,0};//数组名a为整数指针常量,作为getMin的第一个实际参数,将a的首地址传进去printf("getMin is %d",getMin(array,9));return 0;}运行结果:getMin is 09.3.2 指针与数组案例分析案例9.3.2 编写函数求解数组a中的最大元素值,并验证函数的正确性。#include/*入参int a[]等价与 int *a,为一个整型指针变量*/int getMin( int a[],int n){ /*等价于int getMin( int *a,int n)*/int i,min = a[0];for(i=1;iif(min > a[i]) min = a[i];}return min;}int main(){int array[9] = {3,5,2,9,6,8,7,4,0};//数组名a为整数指针常量,作为getMin的第一个实际参数,将a的首地址传进去printf("getMin is %d",getMin(array,9));return 0;}运行结果:getMin is 09.3.2 指针与数组案例分析案例9.3.3 使用指针操作数组的案例分析要求:分析下面的代码,理解数组名作为函数参数,转化为同类型指针的用法。#includeint getMin( int a[],int n){int i,min = a[0];for(i=1;i a[i]) min = a[i]; }return min;}int main(){int array[9] = {3,5,2,9,6,8,7,4,0},*p = array;printf("getMin is %d\n",getMin(array,9));printf("getMin is %d\n",getMin(p+2,4));printf("getMin is %d\n",getMin(&array[4],3));return 0;}/*入参int a[]等价与int *a,为一个整型指针变量。该函数的功能是求解从a位置到a+n-1位置上元素中的最小值*//*传入的实参为数组array的首地址,包括9个元素,即计算a[0]、a[1]...a[8]中的最小值*//*传入的实参为数组array[2]的地址,包括4个元素,即计算a[2]、a[3]、a[4]、a[5]中的最小值*/9.3.3 指针与数组课堂练习题课堂练习题9.3.1:写出执行下面程序后的输出结果#includeint main(){int i;int a[10] = {1,2,3,4,5,6,7,8,9,0};int *p,*p1 = a,*p2 = a+3;printf("*p1 = %d,a[0] = %d\n",*p1,a[0]);printf("*p2 = %d,a[3] = %d\n",*p1,a[3]);printf("p2-p1 = %d\n",p2-p1);printf("*(p1+2) = %d\n",*(p1+2));p2++;if(p2 == &a[3])printf("p2 == a[3]的地址");elseprintf("p2 不等于 a[3]的地址");return 0;}9.3.3 指针与数组课堂练习题课堂练习题9.3.2:写出执行下面程序后的输出结果#includeint main(){int i;int a[10] = {1,2,3,4,5,6,7,8,9,0};int *p,*p1,*p2;p1 = &a[2],p2 = a+9;for(p = p1;p<=p2;p++){printf("%d ",*p);}printf("\n");for(p = a,i=0;i<6;i++){printf("%d ",p[i]);}return 0;}课堂练习题9.3.3:定义函数,采用传递数组指针的方式求解阶乘谢谢观看程序设计基础 展开更多...... 收起↑ 资源预览