vc程序设计内容摘要:
) 将字符数组中的所有字符都设为指定字符 C, 并以 \0结尾 toupper(字符 ) Ctype 返回字符串的长度 (不包括 \0) strcat(串 s1, 串 s2) 函数的用法 函数的用法 函数的用法 includeiostream const NameLen=20。 void order(char name[][NameLen],int n) //字符串排序 { char temp[NameLen]。 for(int i=0。 in1。 i++) //选择排序 for(int j=i+1。 jn。 j++) if(strcmp(name[i],name[j])0) //比较两个字符串的大小 { strcpy(temp,name[i])。 //字符串交换 strcpy(name[i],name[j])。 strcpy(name[j],temp)。 } } int find(char name[][NameLen],int n,char aname[NameLen]) { for(int i=0。 in。 i++) if(strcmp(name[i],aname)==0) //找到 , 返回位置。 return i+1。 else if(strcmp(name[i],aname)0) //未找完 , 但找不到 , 返回 0 return 0。 return 0。 //找完 , 找不到 , 返回 } void main() { charNameTab[][NameLen]={GongJing,LiuNa,HuangPin,AnZijun, LianXiaolei,ChenHailing,CuiPeng,LiuPing}。 char aname[NameLen]。 int n=sizeof(NameTab)/NameLen。 order(NameTab,n)。 for(int i=0。 in。 i++) //输出排序后的各姓名 couti+139。 \t39。 NameTab[i]endl。 coutInput a name:。 cinaname。 if(n=find(NameTab,n,aname)) coutPosition:nendl。 else coutNot found!endl。 } 运行结果 : 1 AnZijun 2 ChenHailing 3 CuiPeng 4 GongJing 5 HuangPin 6 LianXiaolei 7 LiuNa 8 LiuPing Input a name:LiuPing↙ Position:8 指针 指针提供了一种较为直观的 地址 操作的手段,正确地使用指针,可以方便、灵活而有效地组织和表示复杂的数据。 指针在 C++程序中扮演着非常重要的角色,从某种程度上而言,如果不能 深刻的理解 指针的概念,正确而有效的掌握指针,就不可能真正学好 C++,但是指针也是我们最容易产生困惑并导致程序出错的原因之一。 1. 地址与指针 地址: 当定义一个变量后,内存中将会划出一块由若干个存储单元组成的区域,用于保存该变量的数据。 在 内存里每个存储单元都有各自的编号 ,称为地址。 指针: 在 C++中,提供了指针类型,它是一种 用于存放内存单元地址的变量类型 ,地址就存储在这种指针类型的变量中。 正因为 指针变量存储的是地址 ,用它来指明内存单元,所以形象地称这种地址变量为指针(变量)。 2. 指针变量的定义 数据类型是指针变量所指向对象的数据类型,它可以是基本数据类型,也可以是构造数据类型以及 void 类型。 变量名是用户自定义的标识符。 *表示声明的变量是一个指针变量,而不是普通变量。 如: int *ip。 //定义了一个 int型的指针变量 ip float *fp。 //定义了一个 float型指针变量 fp typedef int A[10]。 A *ap。 // 定义了一个 A类型的指针变量 ap sizeof(ip)=sizeof(fp)=sizeof(ap)=4。 数据类型 * 变量名; 3. 指针的初始化与赋值 指针定义 , 只是得到了一个用于存储地址的指针变量。 若指针变量既没有初始化 , 也没有赋值 , 其地址值是一个随机的数。 ( 1) 不要将非地址常量、变量以及无意义的实际地址赋给指针变量。 如: int *p=100。 //错误, 100是一个 int型常量,不是一个地址常量。 int *p=(char *)100。 //100是无意义地址 , 可能指向危险区域。 ( 2) 可以使用一个已初始化的指针去给另一个指针赋值 , 但类型必须一致;若不一致 , 可进行强制类型转换。 如: char *p=NULL。 int *ip=(int *)p+100。 //将 char型指针强制转化成 int型指针。 数据类型 *指针变量名 =初始地址表达式; ( 3) 对于基本数据类型的变量 、 数组元素我们可以使用取地址运算符 amp。 来获得它们的地址 , 但是也只有类型一致才能赋值。 如: int a[10]; //定义 int型数组 int *i_pointer=a; //定义并初始化 int型指针 ( 4) void类型指针 , 可以存储任何的类型地址;但将一个 void类型的地址赋值 给非 void类型的指针变量 , 要使用类型强制转换。 如: void v。 //错误 , 不能定义 void类型的变量 void *vp。 //定义 void类型的指针 4.指针运算 因指针变量存放的是 地址 , 所以 指针的运算实际上就是地址的运算。 指针通常进行下列几种运算:赋值运算 、 取值运算 、算术运算 、 相减运算 、 比较运算。 ( 1) * 和 amp。 运算 *称为 指针运算符。 出现在数据定义语句中时, * 在数据类型与变量之间,是一个 二元运算符 ,用来定义指针变量;出现指针变量表达式 左边 时,是一个一元运算符,表示访问指针所指对象的内容。 如: int a[4]={1,2,3}。 int *ip=amp。 a[2]。 cout*ip。 // 输出 ip指向单元的内容 *ip=100。 // 将 100赋给 a[2]。 00 13 A 00 0 a [0] = 1 00 13 A 00 4 a [1] = 2 * i p 00 13 A 00 8 a [2] = 3 00 13 A 00 C a [3] = 0 … i p 00 13 A 01 4 i p= 00 13 A 00 8 ( 2) 指针与整数的加减运算 指针加上或减去一个整数 n,表示指针从当前位置向后或向前移动 n个 sizeof(数据类型) 长度的存储单元。 因此对于不同的数据类型, n的实际大小就不同。 如: int b[2][3][4]。 typedef char A[10]。 int *p1=b[1][0]。 int *p2=(int *)b[1]。 int *p3=(int *)(b+1)。 double *pd=(double *)p3。 A *pa=(A *)p3。 coutp1,p2,p3,pd,paendl。 coutp1+1,p2+1,p3+1,pd+1,pa+1endl。 运行结果 : 0013FF80, 0013FF80, 0013FF80, 0013FF80, 0013FF80 0013FF84, 0013FF84, 0013FF84, 0013FF88, 0013FF8A ( 3) 指针自增 、 自减运算 指针的自增、自减运算是指针加减运算的特例。 指针的自增或自减表示指针从当前位置向后或向前移动 sizeof(数据类型)长度的存储单元。 例如:程序段: int *p, *q, a=5。 p=amp。 a。 p++。 //指针 p后移 4个字节 *p++。 //先读取 p指向的变量 a的值 5, 然后使指针 p后移 4个字节 (*p)++。 //读取 p指向的变量 a的值 , 然后使 p指向的变量 a自增 1 *++p。 //先使指针 p后移 4个字节 , 然后读取 p指向的变量的值 ++*p。 //将 p指向的变量 a自增 1 *q++=*p++。 //这是一种常用的表达式 , 依次执行 :*q=*p, q++, p++ ( 4) 两指针相减 当两个指针 指向同一数组时 , 两个指针的相减 才有意义。 两个指针相减的结果为一整数 , 表示两个指针之间数组元素的个数。 指针 ( 5) 两个指针的比较运算 两个指针的比较一般用于下列两种情况:一是比较两个指针所指向的对象在内存中的 位置关系 ;二是判断指针是否为 空指针。 5. void类型指针 指向 void类型的指针是一种 不确定类型 的指针 , 它 可以指向任何类型的变量。 实际使用 void型指针时 , 只有通过 强制类型转换 才能使 void型指针得到具体变量的值。 在 没有转换前 void型指针 不能 进行指针的算术运算。 例如: void *vp。 //定义了一个 void型指针 vp int i=6, *ip。 vp=amp。 i。 // vp指向整型变量 i cout“i=”*vpendl。 // 错误 couti=*(int *)pendl。 ip=(int *)vp。 //ip指向 vp指向的变量 i couti=*ipendl。 指针与字符串 字符型指针: 用于存放字符型变量的地址 , 而 字符串的本质是以 \0结尾的字符数组 , 一个字符型指针存储了字符数组的第一个元素的地址 , 也就存储了字符串的地址 , 这个指针就指向了字符串。 在定义一个字符数组时 , 可以将一个字符串常量作为初值 , 但将字符串常量作为初值赋给字符数组和将字符串常量作为 初值 赋给字符指针变量 , 二者的含义是不同的。 例如: char str[5]=abcd。 char *p_str=abcd。 在上述字符串定义有下列不同: (1) 字符数组 str[5]被赋值为 “ abcd”, 因此 , 数组 str的五个数组元素的值分别为 字符 ‘ a’、 ‘ b’、 ‘ c’、 ‘ d’和 ‘ \0’。 字符指针 p_str被赋值为 “ abcd”, 则意味着 指针 p_str的值 为字符串常量 abcd的 第一个字符 39。 a39。 在内存中的地址。 (2) 字符指针 p_str比 str多分配了一个存储地址的空间 , 用于存储字符串的首地 址。 指针与数组 1 使用指针操作符 *存。vc程序设计
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。