C语言程序设计教程:指针.ppt
【例8.5】通过指针变量输出二维数组元素,分析下列程序输出结果。8.2.2指向二维数组的指针程序如下:#includestdio.hvoidmain(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},*p;inti;p=a[0][0];for(i=0;i12;i++)printf(%d,*(p+i));}程序运行结果:1234567891011128.2.2指向二维数组的指针(2)通过行指针访问二维数组:C语言定义行指针的方法如下:类型说明符(*行指针名)[列]如:int(*p)[3];/*指针p为指向一个由3个元素所组成的整型数组指针*/说明:括号中的*表明p是一个指针,它指向一个数组,数组的类型为整型一维数组[4]。在定义中,圆括号是不能少的,否则它是指针数组。8.2.2指向二维数组的指针【例8.6】用行指针输出二维数组,并将数组中的最大元素及所在行列号输出。程序如下:#includestdio.hvoidmain(){ inti,j,m,n,max; inta[3][4]={1,2,3,4,5,50,7,8,122,10,11,12}; int(*p)[4];/*定义p为指向一个有4个元素的一维数组的指针变量*/ p=a;/*p指向第0行*/ max=p[0][0];/*将第一个元素送max*/ 8.2.2指向二维数组的指针for(i=0;i3;i++) { for(j=0;j4;j++) { if(max*(*p+j))/*将大数存入max,并记下其下标*/ { max=*(*p+j); m=i;n=j; } } p++;/*移动指针使其指向下一行*/ } printf(a[%2d][%2d]=%5d,m,n,max);}1、给字符指针赋值的方法:8.2.3指向字符串的指针C语言也可以用字符指针指向一个字符串,使用方法主要有以下几种:(1)通过赋初值使指针指向一个字符串char*ps=″Hello!″;/*赋初值是一个字符串常量*/此时,是对字符指针变量进行初始化。字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址。8.2.3指向字符串的指针(2)通过赋值运算使字符指针指向字符串char*ps;ps=″Hello!″;(3)也可以通过将指针变量之间的赋值使指针指向字符串。例如:char*ps1,*ps2=″Hello!″;ps1=ps2;使ps1也指向了ps2所指向的字符串。即两个字符指针指向的是一个字符串常量的首地址。2、通过字符指针访问字符串:8.2.3指向字符串的指针当字符指针指向一个字符串时,char*ps=″ABCDEF″;则在程序中,可以使用以下语句操作字符指针以访问字符串数据:ps++;/*指针ps加1*/*(ps+i)/*取字符串中的字符*/ps=abcdef.;/*使指针指向新的字符串常量*/注意:(1)当字符指针重新指向另一个字符串时,原来的字符串即丢失。(2)不能用字符指针修改字符串中的字符数据。因为字符串本身是一个常量。例如:*ps++=’a’;/*不能通过字符指针向字符串中的任意位置赋值*/8.2.3指向字符串的指针【例8.7】分析下列程序,采用3种方式输出字符串。8.2.3指向字符串的指针程序如下:#includestdio.hvoidmain(){ char*ps=HelloWord!; inti; printf(%s\n,ps);/*直接输出字符串*/ for(i=0;ps[i]!=\0;i++)/*使用ps[i]一个一个输出字符,直到遇到\0*/ { putchar(ps[i]); } printf(\n); for(i=0;*(ps)!=