为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

字符数组与字符指针变量的区别

2017-11-30 5页 doc 18KB 24阅读

用户头像

is_682974

暂无简介

举报
字符数组与字符指针变量的区别字符数组与字符指针变量的区别请问一下大家,字符数组与字符指针变量用法有什么区别,另外char*s与chars[]有什么区别?最佳答案字符数组名与字符串指针变量名的区别2009-01-1919:08授课内容:一、字符串指针变量的说明和使用字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如:charc,*p=&c;表示p是一个指向字符变量c的指针变量。而:char*s="CLanguage";则表示s是一个指向字符串的指针变量。把字符串...
字符数组与字符指针变量的区别
字符数组与字符指针变量的区别请问一下大家,字符数组与字符指针变量用法有什么区别,另外char*s与chars[]有什么区别?最佳答案字符数组名与字符串指针变量名的区别2009-01-1919:08授课内容:一、字符串指针变量的说明和使用字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如:charc,*p=&c;示p是一个指向字符变量c的指针变量。而:char*s="CLanguage";则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。请看下面一例。main(){char*ps;ps="CLanguage";printf("%s",ps);}运行结果为:CLanguage上例中,首先定义ps是一个字符指针变量,然后把字符串的首地址赋予ps(应写出整个字符串,以便编译系统把该串装入连续的一块内存单元),并把首地址送入ps。程序中的:char*ps;ps="CLanguage";等效于:char*ps="CLanguage";输出字符串中n个字符后的所有字符。二、字符指针变量的运算main(){char*ps="thisisabook";intn=10;ps=ps+n;printf("%s\n",ps);}运行结果为:book在程序中对ps初始化时,即把字符串首地址赋予ps,当ps=ps+10之后,ps指向字符“b”,因此输出为"book"。main(){charst[20],*ps;inti;printf("inputastring:\n");ps=st;scanf("%s",ps);for(i=0;ps[i]!='\0';i++)if(ps[i]=='k'){printf("thereisa'k'inthestring\n");break;}if(ps[i]=='\0')printf("Thereisno'k'inthestring\n");}本例是在输入的字符串中查找有无„k?字符。三、字符串指针作为函数的使用。要求把一个字符串的内容复制到另一个字符串中,并且不能使用strcpy函数。函数cprstr的形参为两个字符指针变量。pss指向源字符串,pds指向目标字符串。表达式:(*pds=*pss)!=`\0'cpystr(char*pss,char*pds){while((*pds=*pss)!='\0'){pds++;pss++;}}main(){char*pa="CHINA",b[10],*pb;pb=b;cpystr(pa,pb);printf("stringa=%s\nstringb=%s\n",pa,pb);}在上例中,程序完成了两项工作:一是把pss指向的源字符复制到pds所指向的目标字符中,二是判断所复制的字符是否为`\0',若是则表明源字符串结束,不再循环。否则,pds和pss都加1,指向下一字符。四、使用字符串指针变量与字符数组的区别用字符数组和字符指针变量都可实现字符串的存储和运算。但两者是有区别的。在使用时应注意以下几个问:1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以„\0?作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。2.对字符数组作初始化赋值,必须采用外部类型或静态类型,如:staticcharst[]={“CLanguage”};而对字符串指针变量则无此限制,如:char*ps="CLanguage";3.对字符串指针方式char*ps="CLanguage";可以写为:char*ps;ps="CLanguage";而对数组方式:staticcharst[]={"CLanguage"};不能写为:charst[20];st={"CLanguage"};而只能对字符数组的各元素逐个赋值。从以上几点可以看出字符串指针变量与字符数组在使用时的区别,同时也可看出使用指针变量更加方便。前面说过,当一个指针变量在未取得确定地址前使用是危险的,容易引起错误。但是对指针变量直接赋值是可以的。因为C系统对指针变量赋值时要给以确定的地址。因此,char*ps="CLangage";或者char*ps;ps="CLanguage";都是合法的。你这个问题问得很好,我们知道实际上一个字符串在进行赋值的时候,例如:char*p="helloworld";这样赋值是允许的。那么这并不代表"helloworld"这个就是一个指针,实际上我们的这一动作,编译器在幕后为我们做了很多事,首先在常量区分配一个字符数组,然后将"helloworld"这个字符串中的字符(包括最后的'\0'字符。)拷贝到此数组(其实此数组我们可以看成是一个匿名数组,因为没有数组名)。然后返回数组首元素的地址,将此地址赋值给字符指针变量p。我们知道在c语言中没有字符串这种类型,在c语言中的字符串是通过字符数组来实现的,而且必须要求此字符数组具有'\0'结束符。这就是字符串与一般的字符数组不同的地方。话说回来,你问到为什么char*p="helloworld";cout<
/
本文档为【字符数组与字符指针变量的区别】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索