资源描述:
《《C语言回顾指针》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、字符指针讲授人:周俏丽变量指针数组Intc[10];Inta;Int*P;a=6;P=c;C[0]=6;63010a内存状态3000P内存状态c[0]c[1]c[2]c[9]….2000内存状态62000C[1]=7;7数组取值操作:数组的首地址赋予指向数组的指针变量。例如:inta[5],*pa;pa=a;(数组名表示数组的首地址,故可赋予指向数组的指针变量pa)也可写为:pa=&a[0];/*数组第一个元素的地址也是整个数组的首地址,也可赋予pa*/⑤把字符串的首地址赋予指向字符类型的指针变量。例如:char*pc;pc="
2、clanguage";这里应说明的是并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。⑥做为函数的实参和形参。main(){char*pc,*pb;pc="clanguage";strcpy(pc,pb);}Voidstrcpy(char*from,char*to){……}字符指针变量和字符数组的区别字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中.charc[10];char*p;1bytesc[0]c[1]c[2]
3、c[9]….200030002000P2.赋值方式字符数组charstr[14];str=“IloveChina!”(错误)charstr[14]=“IloveChina!”;(正确)字符指针char*a;a=“IloveChina!”;a不是字符,而是字符串的首地址;3.对字符指针变量赋初值char*a=“IloveChina!”;等价于char*a;a=“IloveChina!”;而对数组的初始化:charstr[14]=“IloveChina!”;不能等价于charstr[14];str=“IloveChina!”数组可以
4、在变量定义时整体赋初值,但不能在赋值语句中整体赋值.4.分配内存如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址.而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,也就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据.charstr[10];scanf(“%s”,str);char*a;scanf(“%s”,a);char*a,str[10];a=str;scanf(“%s”,a);c[0]c[1]c[2]c[9]….20003000a
5、5.指针变量的值是可以改变的Main(){char*a=“IloveChina!”;a=a+7;printf(“%s”,a);}运行结果如下:China!数组名是不能改变的charstr[]={“IloveChina!”};str=str+7;printf(“%S”,str);(错误)若定义了一个指针变量,并使它指向一个字符串,就可以用下标的形式引用指针变量所指的字符串中的字符main(){char*a=“IloveChina!”;printf(“Thesixthcharcteris%c”,a[5]);}运行结果如下:The
6、sixthcharcterise程序中虽然并未定义数组a,但字符串在内存中是以字符数组形式存放的.a[5]按*(a+5)执行,取出其单元中的值.6.用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串char*format;format=“a=%d,b=%f”;printr(format,a,b);它相当于:printf(“a=%d,b=%f”,a,b);但是不能采用赋值语句对数组整体赋值charformat[]=“a=%d,b=%f”;printf(format,a,b);(错误)指针的加减算术
7、运算对于指向数组的指针变量,可以加上或减去一个整数n。例如:设pa是指向数组a的指针变量,则pa+n,pa-n,pa++,++pa,pa--,--pa;运算都是合法的。指针变量加或减一个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1在概念上是不同的。因为数组可以有不同的类型,各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。例如:inta[5],*p
8、a;pa=a;/*pa指向数组a,也是指向a[0]*/pa=pa+2;/*pa指向a[2],即pa的值为&pa[2]*/注:指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运算是毫无意义的。(3)两个指针变量之间的运算只有指向同一数组