中易网

通过指针处理字符串和通过数组处理字符串有什么区别?

答案:3  悬赏:0  
解决时间 2021-03-23 00:03
通过指针处理字符串和通过数组处理字符串有什么区别?
最佳答案
基本没区别,数组本质上也可以理解为一种指针吧
int a[4];
a本身相当于指向第一个数a[0]的指针,a+1就相当于指向a[1]的指针,所以*(a+1)就等于a[1]
全部回答
定义: char ch[10]; char ch2[]; char* str; 以及"string"。 1.全局的变量和函数内的static变量,存放在内存堆区域。 2.全局的数组和函数内定义的static的数组,存放在内存堆区域。 3.局部变量,数组,存放在内存的栈区域。 4.定义char ch[10]时,如果是全局或者static的,就在堆区域给他分配10byte的空间,并且如果用户没有给它初值,10byte数据全部置零。 5.定义char ch[10]时,如果是局部数组(在函数内定义且不是static的),则在栈区域分配10byte的空间,如果用户没有给它初值,10byte的数据未知,为内存中原来的不确定数据。 6.定义char * str时,给str分配一个4byte的空间,用于保存一个地址。该地址可以指向任意地方。如果没有给它初值,则其中数据是该片内存原来的数据,所以会指向一个不确定的地方,这时候如果对该指针指向的地方赋值,可能会因破坏未知地址内存数据,造成系统崩溃。 7.“string”在代码中出现时,自动分配空间,在内存中的存放是string\0,占用7个byte. “string”本身可以作为一个地址来看,该地址就是s字母所在的内存位置。 8.str=“string”是: 开始已经定义了一个char 指针str,且没指向任何地方。 该语句,把一个string字符串加上\0结束符存放在内存中,并且把该字符串的地址,也就是s的地址,即“string”给str,使str指向“string”所在的空间。 9.ch=“string”是不对的。 ch是一个数组。数组名虽然也就是数组第一个元素的地址。与指针有相似的地方。但是指针可以指向任意的地方。数组一旦定义,其地址就是固定的,数组名ch所指向的地方就只能是ch[0]的地址,是不能够修改的,不能够再指向其他的地方了。 这里可以理解为系统给ch数组分配了一段10byte的空间。“string”也有另一段7byte的空间,但是ch是不能重新指向“string”所在的地方的。 10.str=null同第8项。 str定以后,指向未知区域。 后面可以把str指向一个有效区域或者一个null区域。最好在定义的时候就给它指向null区域,以免出现第6项中的崩溃问题。在使用str的时候,再给它一个有效地址,如第8项中的赋值。 11.ch=null同第9项。ch作为数组名,内存是在定义时就分配好的。不能再指向其他地方,或者null。 12.在定义并初始化 char *str时,可以char *str=ch,数组ch的起始地址,给str,把该地址存放在str所在的4byte空间中。 12.在定义之后,赋值时,str=?? 是把??作为一个地址,给到str,存放在str所在的4byte的内存空间,如第6项。所以会出现类似str=ch2,或者str=“string”,这个语句的作用是让str指向其他的地址。另不能出现str=12等现象,因为12做作为一个地址,在内存中的数据是程序员不知道的,万一该地址的数据被修改了,会破坏系统数据,造成未知问题。 13.*str=?? 是把??作为一个字符,给到*str,存放在str所指向的地址内存空间。该语句的作用是改变str所指向的空间内所存储的值,而不会改变str所指向的地方。例如char *str=“string”; *str=‘f’,则以%s格式打印出str后,输出为ftring。另%s格式输出,会一str所指向的地址开始,一直输出到\0结束。 14.??=*str,是把str所指向的地址的数据,赋值给??。 例如如果str指向“string”, 则char c=*str的作用等同于char c=‘s’。 15.ch为数组名,其指向的地方不能改变,但其指向的地方的内容可以改变。如ch=??不对。但是ch[0]='w'是正确的。 16.str是指针,指针本身占有4byte的存储空间,该空间内存储了一个数据,该数据是内存中其他地方的地址。所以可以通过修改该数据,来使str指向其他的地址,如第12项。也可以通过*str来修改str所指向的地址内所存储的数据,如第13条。 17.“string”是一个地址。该地址就是s字母所在的地址。他可以作为一个地址赋值给指针,如str=“string”(在指针str定义,并初始化时,可以char *str=“string”格式。) 18.ch的固定性,你可以把ch 按照 char * const ch理解。即ch指向的地址不能变。但ch指向地址内的数据可以变。
字符数组只能在出事化的时候赋初值,或者从键盘上输入从而大道整体赋值; 而指针数组除了上面的外还可以在定义后众僧替赋值,很方便,并且不受长度的限制; 我个人偏向于用指针。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
总是喜欢刁难我的翻译
在昆明转让一个室内面积100平米的洗车美容店
战地4用什么平台玩好
五羊本田锋驰wh100-2a点样安装防盗器
鞋架尺寸标准是多少 鞋架尺寸大全
王琳 赵雅芝长得像吗?
我教师资格证是小学教育语文专业。考事业编报
兰研嫩肤膏可以和薏仁水一起用吗
2016中班学期学期计划怎么写
辛未年!庚子月!辛未日!壬辰时!请位看看八
开一个0-8孩子的早教中心赚钱吗
前女友昨天和我复合,我答应了。昨天对我非常
淘宝上的便宜家具能买吗
关于百年追梦 全面小康的作文
作文:日记一则600字
推荐资讯
成都修鞋辅料那有卖
糖醋青椒怎么弄才好吃?
2000块钱性价比最好的手机
福建福州有什么好玩好吃的(有特色的)!!!大神
如何让将一个网址设置成默认网址
电影最高奖项是
像女生表白了,她说有喜欢过我,但还是拒绝了我
私企怎么办失业保险?
<% %>中的JAVA代码 获取JSP页面值的问题<stru
谁见过真正的天使这篇作文
63除以1.68平方=?
丰县房产局东方大厦小区业主姓名四单元二十一
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?