C大学教程指针和基本指针的字符串课件_第1页
C大学教程指针和基本指针的字符串课件_第2页
C大学教程指针和基本指针的字符串课件_第3页
C大学教程指针和基本指针的字符串课件_第4页
C大学教程指针和基本指针的字符串课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针指针v引用调用引用调用v数组与指针数组与指针v函数指针函数指针v基于指针的字符串基于指针的字符串v总结总结C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v我们首先的观念就是简单地把地址作为数我们首先的观念就是简单地把地址作为数据,可以把地址存储在内存中。据,可以把地址存储在内存中。int x; 1000 1000 2 2x = 2; 1004 1004 1020 1020 10001000由于地址作为数据对待,他们由于地址作为数据对待,他们也可以存储在内存中。也可以存储在内存中。C+大学教程 2007.9C大学

2、教程指针和基本指针的字符串课件v当一个变量存储另一个变量的地址时,那我们说它当一个变量存储另一个变量的地址时,那我们说它就是那个变量的指针。就是那个变量的指针。v在内存表中,我们经常用箭头来表示指针,在内存表中,我们经常用箭头来表示指针,x x的真的真实地址和我们实地址和我们理解的概念不理解的概念不相关。相关。v我们经常用任意我们经常用任意 地址描述指针,地址描述指针, 同时在以后经常同时在以后经常会放弃它。会放弃它。 int x; 1000 2 x = 2; 1004 1020 1000 我们把1000作为整数2的指针C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针就是把

3、地址作指针就是把地址作为数据,把地址存为数据,把地址存储在内存中储在内存中v指针变量指针变量:存储地:存储地址的变量址的变量v变量的指针变量的指针:当一:当一个变量存储另一个个变量存储另一个变量的地址时,那变量的地址时,那我们说它就是那个我们说它就是那个变量的指针变量的指针1000 21000如在某一程序如在某一程序中定义了中定义了int x;int x;X=2;X=2;如系统给如系统给x x分分配的空间是配的空间是10001000号单元,号单元,则指向则指向x x的指的指针是另一个变针是另一个变量,该变量中量,该变量中存放的数据为存放的数据为10001000C+大学教程 2007.9C大学教

4、程指针和基本指针的字符串课件v如何定义一个变量为指针变量?如何定义一个变量为指针变量? 类型标识符类型标识符 *指针变量指针变量; 如:如:int int *intp;intp; double double *doublep;doublep; char char * *chPtr;chPtr;多个指针变量需要分别加多个指针变量需要分别加* *: double double * *doublep,doublep,* *doubleq;doubleq;C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v回答这些问题可以使我们更好地理解指针回答这些问题可以使我们更好地理解指针。 int

5、x,*px; x = 2; 1000 x 2 1004 问题:问题:1、如何把如何把x x的地址置入的地址置入pxpx中?中?2、如何用如何用pxpx处理和改变处理和改变x x? 1020 pxC+大学教程 2007.9C大学教程指针和基本指针的字符串课件v我们不能用简单的常数作为地址对指针进行赋我们不能用简单的常数作为地址对指针进行赋值。我们永远不知道当我们编写程序时,变量值。我们永远不知道当我们编写程序时,变量地址的值将是什么?地址的值将是什么? int x,*px; 1000 x = 2; 2 1004 问题:问题:1 1、如何把、如何把x x的地址置入的地址置入pxpx中?中?我们不能

6、用这样表示:我们不能用这样表示: 1020 pxpxpx=1000; ; C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v如何把某一变量的地址置入一个指针变如何把某一变量的地址置入一个指针变量中?量中?用地址运算符用地址运算符 “&” ” 解决。解决。如表达式如表达式 “&x” ” 返回的是变量返回的是变量 x 的地址。如:的地址。如:intp = &x; ;& 运算符后面不能跟常量或表达式。如运算符后面不能跟常量或表达式。如 &2 是没有意义的,是没有意义的,&(m * n + p )。也是没。也是没有意义的有意义的C+大学教程 2007.9C大学教程指针和基本指针的字符串课

7、件v提供运算符返回操作数的地址,我们用提供运算符返回操作数的地址,我们用& &来来表示。表示。 int x,*px; 1000 x = 2; 2 1004 我们想要做的:px = x的地址 1020我们应该表示为: pxpx = &xC+大学教程 2007.9C大学教程指针和基本指针的字符串课件v使用变量的指针就是为了用这个指针得到使用变量的指针就是为了用这个指针得到变量的值并改变它。变量的值并改变它。int x,*px; 1000 2x = 2; 1004 px = &x;2、我们怎样用px得到x的值并改变它? 1020 pxC+大学教程 2007.9C大学教程指针和基本指针的字符串课件v如

8、何用指针变量处理和改变它所指向的单如何用指针变量处理和改变它所指向的单元的值?元的值?用引用运算符用引用运算符 “*” ” 解决解决。如。如 *intp 表示的表示的是是 intp 指向的这个单元的内容。指向的这个单元的内容。在对在对 intp 使用引用运算之前,必须先对使用引用运算之前,必须先对 intp 赋值赋值C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v在定义中,在定义中,* *号是语法标记同时和类型结合在一起产生一号是语法标记同时和类型结合在一起产生一个指针定义。个指针定义。v在运算时,我们采用在运算时,我们采用* *号运算符,就象指针定义一样。号运算符,就象指针定

9、义一样。 但是但是* *号是独立号是独立 运算符,并和运算符,并和 指针一起表示指针一起表示 一个数值。一个数值。int x,*px,y; 1000 x 2x = 2; 1004px = &x;y 2我们想得到:我们想得到:y=pxy=px指向的值指向的值; ; 1020 px我们表示为:我们表示为:y=y=* *px;px;C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v我们可以认为一个指针是另一个变量的参考,当我们可以认为一个指针是另一个变量的参考,当我们处理这个变量时,我们叫这个运算符为我们处理这个变量时,我们叫这个运算符为“参参考运算符考运算符”,这个操作为,这个操作为

10、“参考指针参考指针”int x,*px,y; 1000 x 2x = 2; 1004 2px = &x;yy=*px; 1020 px*为引用运算符C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v为什么指针要指向一定类型的数据?为什么指针要指向一定类型的数据? 地址对于编译器来说不足以解析地址的数据类型。地址对于编译器来说不足以解析地址的数据类型。v由于指针的基本数据类型可以对指针表达式进行错由于指针的基本数据类型可以对指针表达式进行错误检查,误检查,v比如,分配一比如,分配一个整型数据指个整型数据指针,或者反之针,或者反之将产生一个警将产生一个警告。告。int x,*px,y

11、; 1000 x 2x = 2; 1004 px = &x;y 2y=*px; 1020指针必须要有一个明确的数据类型 px 1000以便编译器可以解析数据的指向类型C+大学教程 2007.9C大学教程指针和基本指针的字符串课件如有:如有:int X, *intp, Y;X=3;Y=4;intp=&X;1000intp10044Y10003X如执行:如执行:*intp=Y+4;1000intp10044Y10008X注意:不能用注意:不能用intp=100;intp=100;因为我们永远不知道变量存储的真实地址,而且程序每因为我们永远不知道变量存储的真实地址,而且程序每次运行可能都不同。运行次

12、运行可能都不同。运行Fig.8.4 Fig.8.4 观察观察aPtraPtr值的变化值的变化C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针变量可以指向不同的变量。如指针变量可以指向不同的变量。如上例中上例中intp指指向向x,我们可以通过对,我们可以通过对intp的重新赋值改变指针的的重新赋值改变指针的指向。如果想让指向。如果想让intp指向指向y,只要执行,只要执行intp=&y就就可以了。这时,可以了。这时,intp与与x无任何关系。无任何关系。v同类的指针变量之间可相互赋值,表示同类的指针变量之间可相互赋值,表示二个指针二个指针指向同一内存空间。指向同一内存空间。v

13、空指针空指针指针没有指向任何空间指针没有指向任何空间空指针用常量空指针用常量NULLNULL表示,表示,NULLNULL的值一般赋为的值一般赋为0 0不能引用空指针指向的值不能引用空指针指向的值C+大学教程 2007.9C大学教程指针和基本指针的字符串课件设有定义设有定义 int x, y; int *p1,*p2;1000 x1004y1008p11012p2执行语句:执行语句:x=23;y=234;1000 23x1004 234y1008p11012p2执行语句:执行语句:p1=&x;p2=&y;1000 23x1004 234y1008 1000p11012 1004p2执行语句:执行

14、语句:*p1=34;*p2=17;1000 34x1004 17y1008 1000p11012 1004p2C+大学教程 2007.9C大学教程指针和基本指针的字符串课件有以下结构有以下结构 Ap1aBp2b比较执行比较执行 p1=p2和和 *p1= *p2后的不同结果。后的不同结果。 解:解: Ap1aBp2bBp1aBp2bC+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针在使用前必须初始化。指针在使用前必须初始化。v仅和别的变量一样定义指针,不初始化是一仅和别的变量一样定义指针,不初始化是一个比较普遍的错误。个比较普遍的错误。v没有初始化的指针可能指向任意地址,对这没

15、有初始化的指针可能指向任意地址,对这些指针作操作可能会导致程序错误。些指针作操作可能会导致程序错误。vNULLNULL是一个特殊指针值,称为空指针。它的是一个特殊指针值,称为空指针。它的值为值为0 0。它可被用来初始化一个指针,表示不。它可被用来初始化一个指针,表示不指向任何地址。指向任何地址。C+大学教程 2007.9C大学教程指针和基本指针的字符串课件vvoid指针:统配指针类型指针:统配指针类型v定义:定义:void *指针变量名;指针变量名;v作用:在标准作用:在标准C中,只有类型相同的指中,只有类型相同的指针之间能互相赋值,但任何类型的指针针之间能互相赋值,但任何类型的指针都能与统配

16、指针互相赋值。主要用于动都能与统配指针互相赋值。主要用于动态内存分配。态内存分配。C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针指针v引用调用引用调用v数组与指针数组与指针v函数指针函数指针v基于指针的字符串基于指针的字符串v总结总结C+大学教程 2007.9C大学教程指针和基本指针的字符串课件vC+有三种传递参数到函数的有三种传递参数到函数的方法方法: 按值传递按值传递, 用引用参数按引用传递用引用参数按引用传递 用指针参数按引用传递用指针参数按引用传递v按值传递按值传递: 在函数内部对形式在函数内部对形式参数的任何改变都不会影响实参数的任何改变都不会影响实际参数的值。

17、际参数的值。void swap(int a, int b) int c; c=a; a=b; b=c; 如果调用如果调用swap(x, y);并不能真正交换并不能真正交换x和和y的值!的值!C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v但在某些应用中确实需要改变实际参数但在某些应用中确实需要改变实际参数的值。例如,我们经常需要修改两个变的值。例如,我们经常需要修改两个变量的值,希望有个函数可以实现此功能。量的值,希望有个函数可以实现此功能。要解决此问题可以采用指针作为参数。要解决此问题可以采用指针作为参数。C+大学教程 2007.9C大学教程指针和基本指针的字符串课件void

18、 swap(int *a, int *b) int c; c=*a; *a= *b; *b=c; swap(&x, &y) 3 4xyab用指针作为参数可以在函数中修改主调程序的用指针作为参数可以在函数中修改主调程序的变量值,即实现变量传递。但必须小心使变量值,即实现变量传递。但必须小心使用!用!调用:调用:C+大学教程 2007.9C大学教程指针和基本指针的字符串课件void swap(int *a, int *b) int c, d; c=*a; *a= *b; *b=c; a=&c; b=&d swap(&x, &y) 3 4xyabcd这里这里, 通过传指针仍然交换了通过传指针仍然交换

19、了x, y的值的值,交换后交换后a, b又分别获得了局部变量又分别获得了局部变量c, d的地址的地址. 所以函数所以函数本质上还是传值本质上还是传值, 是将地址值传给了是将地址值传给了a, b变量变量.调用:调用:C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v把函数参数声明为指针把函数参数声明为指针v在函数体内使用间接访问指针在函数体内使用间接访问指针v当调用函数时,把地址作为参数传递当调用函数时,把地址作为参数传递C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v目前为止我们了解到的函数只能有一个返回值,目前为止我们了解到的函数只能有一个返回值,由由retur

20、n 语句返回。语句返回。v一个一元二次方程有二个解,如何让此函数返一个一元二次方程有二个解,如何让此函数返回二个解。答案是采用指针作为函数的参数。回二个解。答案是采用指针作为函数的参数。v函数原型可设计为:函数原型可设计为: int SolveQuadratic(double a, double b, double c, double *px1, double *px2)v函数的调用函数的调用 SolveQuadratic(1.3, 4.5, 2.1, &x1, &x2) SolveQuadratic(a, b, c, &x1, &x2)C+大学教程 2007.9C大学教程指针和基本指针的字符

21、串课件int SolveQuadratic(double a,double b,double c,int SolveQuadratic(double a,double b,double c, double double * *px1,double px1,double * *px2px2) ) double disc, sqrtDisc; double disc, sqrtDisc; if(a = 0) return 1; if(a = 0) return 1; disc = b disc = b * * b 4 b 4 * * a a * * c; c; if(disc0) return 1

22、; if(disc0) return 1; sqrtDisc = sqrt(disc); sqrtDisc = sqrt(disc); * *px1px1 = (-b + sqrtDisc) / (2 = (-b + sqrtDisc) / (2 * * a); a); * *px2px2 = (-b - sqrtDisc) / (2 = (-b - sqrtDisc) / (2 * * a); a); return 0; return 0; C+大学教程 2007.9C大学教程指针和基本指针的字符串课件int main(void) double a, b, c, x1, x2; int re

23、sult; cout“input a, b, c:n”; cinabc; result = SolveQuadratic(a, b, c, &x1, &x2); if (result) cout“error”; else cout“x1=“x1x2=“x2;C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针是如此的奇妙指针是如此的奇妙, 通过传递指针值通过传递指针值, 函函数获得了对外界变量空间的访问权限数获得了对外界变量空间的访问权限, 尤其为其创造了修改空间中数据的机会尤其为其创造了修改空间中数据的机会.v如何通过指针只能做读取如何通过指针只能做读取, 而不能写入而不能写

24、入?用用const修饰修饰v加加const的时机的时机: 遵循最小特权原则遵循最小特权原则, 对于对于函数的参数函数的参数, 在能满足函数处理数据的在能满足函数处理数据的要求的前提下要求的前提下, 给予它最小的权限给予它最小的权限C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指向非常量的非常量指针指向非常量的非常量指针 调用调用: int x; f(&x) void f(int *ptr) 可以通过引用改变可以通过引用改变x的值的值; /*ptr=3; 可以改变可以改变ptr本身的值本身的值; / ptr+; ; 此时此时, x是变量是变量, ptr也是变量也是变量C+大学教

25、程 2007.9C大学教程指针和基本指针的字符串课件v指向常量数据的非常量指针指向常量数据的非常量指针 调用调用: int x; f(&x) void f(const int *ptr) 不可以通过引用改变不可以通过引用改变x的值的值; /*ptr=3; 可以改变可以改变ptr本身的值本身的值; / ptr+; ; 此时此时, x是变量是变量, ptr也是变量也是变量, 但不可以通过对但不可以通过对ptr的引用运算而修改的引用运算而修改x的值的值C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指向非常量的常量指针指向非常量的常量指针 调用调用: int x; f(&x) voi

26、d f( int * const ptr ) 可以通过引用改变可以通过引用改变x的值的值; /*ptr=3; 不可以改变不可以改变ptr本身的值本身的值; / ptr+; ; 此时此时, ptr是常量是常量, x的值也不可以通过的值也不可以通过ptr的引的引用方式来改动用方式来改动 C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指向常量的常量指针指向常量的常量指针 调用调用: int x; f(&x) void f( const int * const ptr ) 不可以通过引用改变不可以通过引用改变x的值的值; /*ptr=3; 不可以改变不可以改变ptr本身的值本身的值;

27、 / ptr+; ; 此时此时, ptr是变量是变量, ptr所指的空间中的值也不能所指的空间中的值也不能通过它来改变通过它来改变C+大学教程 2007.9C大学教程指针和基本指针的字符串课件sizeof(sizeof(类型名类型名) ) 返回该数据类型单个元素所占的字节数返回该数据类型单个元素所占的字节数sizeof sizeof 数组名数组名 返回该数组所占的字节数返回该数组所占的字节数int array10;coutsizeof arrayendl; void f(int *p, int len) coutsizeof pendl;调用调用f(array, 10); 返回返回10*4 即

28、即 40输出输出4, 即一个指针变量占据的空间即一个指针变量占据的空间, 而非数组而非数组array占据的空间占据的空间C+大学教程 2007.9C大学教程指针和基本指针的字符串课件int x,y,*p;定义一个整型指针。如定义多个指针变量,定义一个整型指针。如定义多个指针变量,则在每个变量前都要加则在每个变量前都要加*p = &x;把变量的地址赋给指针把变量的地址赋给指针*p = 2;改变指针指向的地址的值改变指针指向的地址的值y = *p;指针指向的地址中的值赋给一个变量指针指向的地址中的值赋给一个变量Swap(&x,&y);传递地址参数传递地址参数void Swap(int *p1, i

29、nt *p2)定义指针作为形式参数定义指针作为形式参数C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针指针v引用调用引用调用v数组与指针数组与指针v函数指针函数指针v基于指针的字符串基于指针的字符串v总结总结C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v在在C+中中, 数组与指针是密切相关的数组与指针是密切相关的, 两者几乎两者几乎可以交换使用可以交换使用. 数组名代表数组的起始地址数组名代表数组的起始地址,因因此一个数组名就是一个常量指针此一个数组名就是一个常量指针.v数组与指针相同之处数组与指针相同之处 在访问内存方面的操作方式几乎相同在访问内存方面的

30、操作方式几乎相同v数组与指针不同之处数组与指针不同之处 1、系统内存空间分配不同、系统内存空间分配不同 2、数组名是常量指针,不能修改它的值。、数组名是常量指针,不能修改它的值。C+大学教程 2007.9C大学教程指针和基本指针的字符串课件const int N =5;int aN=1,2,3,4,5; 假设假设300是是a的基的基地址地址int *p; 12345ap+i 本质是本质是 p+4*i3、 *(a+2) ?2、+p; 1、p=a; p=300p=300+4*13C+大学教程 2007.9C大学教程指针和基本指针的字符串课件const int N =5;int aN, *p; 假设

31、假设300是是a的基地址的基地址如下操作是允许的:如下操作是允许的:p=&a0; 此时此时p=300等价于等价于 p=&a1; 此时此时p=304;p=a; p=a+1; C+大学教程 2007.9C大学教程指针和基本指针的字符串课件const int N =5;int aN, *p; 假设假设300是是a的基地址的基地址对数组求和的三种方式:对数组求和的三种方式:方法方法1: sum=0; for( p = a; p &aN; +p ) sum += p;方法方法2: sum=0; for( i = 0; i N; +i ) sum += *(a+i);方法方法3: p=a; sum=0;

32、for( i = 0; i N; +i ) sum += pi;C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v系统内存空间分配不同系统内存空间分配不同const int N =5;int aN, *p; 假设假设300是是a的基地址的基地址300304308312316a0a1a2a3a4apC+大学教程 2007.9C大学教程指针和基本指针的字符串课件const int N =5; int aN, *p; 假设假设300是是a的基地址的基地址以下操作是以下操作是不不允许的:允许的: a=p; a+; a+=3;a是常量指针,不能修改它的值。是常量指针,不能修改它的值。运行并

33、分析运行并分析Fig. 8.20, Fig.8.21C+大学教程 2007.9C大学教程指针和基本指针的字符串课件数组是同种数据类型数据的集合数组是同种数据类型数据的集合,该类型当然也该类型当然也可以是指针可以是指针.指针数组指针数组: 数组的每个元素都是指针数组的每个元素都是指针如如: char *a4; char ch1, ch2, ch3, ch4 a0=&ch1; a1=&ch2; a2=&che3; a3=&ch4;C+大学教程 2007.9C大学教程指针和基本指针的字符串课件 实际应用中实际应用中,常见的做法是字符串数组常见的做法是字符串数组: const char *suit4=

34、“Hearts”, “Diamonds”, “Clubs”, “Spades” 字符串数组中的每一项都是一个字符串字符串数组中的每一项都是一个字符串,实际实际指向相应字符串的第一个字符的指针指向相应字符串的第一个字符的指针(地址地址) C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v指针指针v引用调用引用调用v数组与指针数组与指针v函数指针函数指针v基于指针的字符串基于指针的字符串v总结总结C+大学教程 2007.9C大学教程指针和基本指针的字符串课件指向函数的指针指向函数的指针: 指针指向内存中函数代码存放的起始地址指针指向内存中函数代码存放的起始地址函数指针和其它指针一样也

35、可以传递给函数、从函函数指针和其它指针一样也可以传递给函数、从函数中返回、赋给其他的函数指针、存储在数组中。数中返回、赋给其他的函数指针、存储在数组中。函数指针的声明函数指针的声明: 如如 bool (*compare)(int, int) 类型名类型名(*指针变量名指针变量名)(形式参数列表形式参数列表)C+大学教程 2007.9C大学教程指针和基本指针的字符串课件通过函数指针调用函数通过函数指针调用函数: 如如 (*compare)(3+5, x) 其中其中x是是int类型类型 (*指针变量名指针变量名)(实际参数列表实际参数列表)函数指针常用在菜单驱动的系统中函数指针常用在菜单驱动的系统

36、中, 将不同的菜单功将不同的菜单功能设计成不同的函数来实现能设计成不同的函数来实现, 之后根据用户输入之后根据用户输入的不同通过函数指针调用不同的函数的不同通过函数指针调用不同的函数.C+大学教程 2007.9C大学教程指针和基本指针的字符串课件/ Fig. 8.29: fig08_29.cpp/ Demonstrating an array of pointers to functions.#include using std:cout;using std:cin;using std:endl;/ function prototypes - each function performs si

37、milar actionsvoid function0( int );void function1( int );void function2( int );C+大学教程 2007.9C大学教程指针和基本指针的字符串课件int main() void (*f 3 )( int ) = function0, function1, function2 ; int choice; cout choice;声明函数指针数组C+大学教程 2007.9C大学教程指针和基本指针的字符串课件 while ( ( choice = 0 ) & ( choice 3 ) ) (*f choice )( choic

38、e ); cout choice; cout Program execution completed. endl; return 0;通过函数指针调用不同函数C+大学教程 2007.9C大学教程指针和基本指针的字符串课件void function0( int a ) cout You entered a so function0 was callednn; void function1( int b ) cout You entered b so function1 was callednn; void function2( int c ) cout You entered c word;v通

39、过通过cin调用函数调用函数getline读入一个字符串到一个字符读入一个字符串到一个字符数组中。读入时见到数组中。读入时见到一个换行符号一个换行符号结束,结束,结果串中结果串中不含换行符。不含换行符。 char line80; cin.getline(line, 80);C+大学教程 2007.9C大学教程指针和基本指针的字符串课件v#include v提供了字符串操作、比较、查找、计算长度等函数提供了字符串操作、比较、查找、计算长度等函数char *strcpy(char *s1, const char *s2)把把s2复制到复制到s1,直到遇到直到遇到s2中的中的0。s1要保证足够空间。

40、函数返回要保证足够空间。函数返回s1的的值值char *strncpy(char *s1, const char *s2, size_t n)把把s2复制到复制到s1,且最多复制且最多复制n个字符。个字符。s1要保证足够空间。函数返回的是要保证足够空间。函数返回的是s1的值的值char *strcat(char *s1, contst char *s2) 把把s1与与s2拼接起来,结果存放到拼接起来,结果存放到s1中。程序员必须保证中。程序员必须保证s1有足够的空有足够的空间容纳拼接结果。函数返回的是串间容纳拼接结果。函数返回的是串s1。C+大学教程 2007.9C大学教程指针和基本指针的字符

41、串课件int strcmp(const char *s1, const char *s2)按照字典次序比较按照字典次序比较s1和和s2,s1s2 结果结果 s2 0char *strcpy(char *s1, const char *s2)把把s2复制到复制到s1,直到遇到直到遇到s2中中的的0。s1要保证足够空间。函要保证足够空间。函数返回的是数返回的是s1size_t strlen(const char *s)函数返回函数返回0前的字符个数前的字符个数C+大学教程 2007.9C大学教程指针和基本指针的字符串课件#include using std:cout;using std:endl;

42、#include / prototypes for strcat and strncatusing std:strcat; using std:strncat; int main()C+大学教程 2007.9C大学教程指针和基本指针的字符串课件 char s1 20 = Happy ; / length 6 char s2 = New Year ; / length 9 char s3 40 = ; cout s1 = s1 ns2 = s2; strcat( s1, s2 ); / concatenate s2 to s1 (length 15) cout nnAfter strcat(s1

43、, s2):ns1 = s1 ns2 = s2; / concatenate first 6 characters of s1 to s3 strncat( s3, s1, 6 ); / places 0 after last characterC+大学教程 2007.9C大学教程指针和基本指针的字符串课件 cout nnAfter strncat(s3, s1, 6):ns1 = s1 ns3 = s3; strcat( s3, s1 ); / concatenate s1 to s3 cout nnAfter strcat(s3, s1):ns1 = s1 ns3 = s3 endl; r

44、eturn 0; C+大学教程 2007.9C大学教程指针和基本指针的字符串课件#include using std:cout;using std:endl;#include / prototype for strtokusing std:strtok; int main()C+大学教程 2007.9C大学教程指针和基本指针的字符串课件 char sentence = This is a sentence with 7 tokens; char *tokenPtr; cout The string to be tokenized is:n sentence nnThe tokens are:nn; / begin tokenization of sentence tokenPtr = strtok( sentence, );C+大学教程 2007.9C大学教程指针和基本指针的字符串课件 / continue tokenizing sentence until tokenPtr becomes NULL while ( tokenPtr != NULL ) cout tokenPtr n; tokenPtr = strtok( NULL, ); / get next token / en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论