C指针的13份资料.zip

源代码在线查看: ͩi

软件大小: 11436 K
上传用户: apsdn
关键词: zip 指针
下载地址: 免注册下载 普通下载 VIP

相关代码

				7.2.3字符串与指针
				 
				
				  1.字符串与字符串指针
				  字符串是存放在字符数组中的,对字符数组中的字符逐个处理时,前面介绍的指针与数组之间的关系完全适用于字符数组。通常将字符串作为一个整体来使用,用指针来处理字符串更加方便。当用指向字符串的指针来处理字符串时,并不关心存放字符串的数组大小,而只关心是否已处理到字符串的结束符。 
				
				
				  【例7.10】用指针实现字符串拷贝。 
				 # include 
				 # include 
				 void main(void)
				 { char *p1="I am a student" ;
				  char s1[30],s2[30];
				  strcpy( s1,p1); //用命令拷贝字符串 
				  char *p2=s2; //将数组s2首地址赋p2
				  for (;*p2++=*p1++;); //用指针拷贝字符串
				  cout				  cout				 }
				  执行后输出:
				  s1= I am a student 
				  s2= I am a student
				 
				
				  说明:
				  (1)编译系统执行定义语句char *p1="I am a student" 时,首先为字符串"I am a student "分配内存空间,然后将该内存空间首地址赋给指针变量p1。
				  (2)用指针变量拷贝字符串过程是,先将指针变量p2指向字符串数组s2的首地址,然后通过赋值语句*p2=*p1将字符由字符串s1中拷贝到s2中,再移动p1、p2到下一个字符单元,依次循环直到字符串结束符'\0'为止,如图7.8所示。全部拷贝过程用一个for语句完成。在for(;*p2++=*p1++;)语句中,表达式:    
				
				  *p2++=*p1++ 等价于下列三条语句,
				  *p1=*p2; // s2[i]=s1[i],将指针p1所指s1[i]赋给指针p1所指s2[i]。
				  p1++; //指针p1加1指向s1的下一个元素
				  p2++; //指针p2加1指向s2的下一个元素
				  上述语句不断循环,直到p1指向结束字符'\0'=0时,for 语句因条件为假而结束。从而完成字符串s1拷贝到字符数组s2的任务。
				  (3)指针变量p1可以作为拷贝函数strcpy(s1,p1)的参数。
				  
				
				  2.字符型指针变量与字符数组的区别
				  (1)分配内存
				  设有定义字符型指针变量与字符数组的语句如下:
				  char *pc ,str[100];
				  则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符。而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址。
				  (2)初始化赋值含义
				  字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。例如:
				  char str[ ] ="I am a student ! " ,s[200];
				  char *pc="You are a student ! " ;
				  对于字符数组,是将字符串放到为数组分配的存储空间去,而对于字符型指针变量,是先将字符串存放到内存,然后将存放字符串的内存起始地址送到指针变量pc中。
				  (3)赋值方式
				  字符数组只能对其元素逐个赋值,而不能将字符串赋给字符数组名。对于字符指针变量,字符串地址可直接赋给字符指针变量。例如:
				  str="I love China! "; //字符数组名str不能直接赋值,该语句是错误的。
				  pc="I love China! "; //指针变量pc可以直接赋字符串地址,语句正确 
				  (4)输入方式
				  可以将字符串直接输入字符数组,而不能将字符串直接输入指针变量。但可将指针变量所指字符串直接输出。
				  例如: cin >> str //正确
				  cin >> pc //错误
				  cout				  (5)值的改变
				  在程序执行期间,字符数组名表示的起始地址是不能改变的,而指针变量的值是可以改变的。例如:str=str+5; //错误
				  pc=str+5; //正确
				  小结 字符数组s[100] 指针变量pc
				  (1)分配内存 分配100个单元 分配4个单元。
				  (2)赋值含义 字符串放到数组存储空间 先将字符串存放到内存
				  将存放串的首地址送到pc中。
				  (3)赋值方式 只能逐个元素赋值 串地址可赋给pc
				  (4)输入方式: 串直接输入字符数组 不能将字符串直接输入指针变量
				  (5)值的改变: 字符数组首地址不能改变 指针变量的值可以改变
				由以上区别可以看出,在某些情况下,用指针变量处理字符串,要比用数组处理字符串方便。
				
							

相关资源