问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

字符数组名,无名字符串和字符指针有什么区别?

发布网友 发布时间:2022-04-23 05:48

我来回答

3个回答

热心网友 时间:2023-10-17 07:04

定义:
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指向地址内的数据可以变。

热心网友 时间:2023-10-17 07:05

你学过C吗?
首先:1.str和ch这两个是什么关系,str是个指针,ch呢,是个数组的首地址,这两个虽然可以地址一样,但其含义大不相同,ch定义大小后是不能用数组名给其赋值的,就想你给10个小朋友糖,你不能只给第一个,那其他的小朋友会不理你的^_^,下面我不说你也明白了吧。
2.下面我们来说说*str与str:
char *str;char str;你说这两个是什么意思?
很明显,*str与str是一个意思,就是变量的值。我们回头看
char *str;知道了*str,那str就好办了,
我给你说下*与&,还有[]的关系:
你知道&是取地址,我们把他看作门,这个*呢,防盗门钥匙=-=-,关门,开门,呵呵,意思就是他们俩可以抵消,就是说:
*&p=p;也许你又要问了,&&p是什么意思啊?我靠,你家防盗门有几个啊?&&p逻辑错误;[]这个就是地址运算符,没什么好说的;知道为什么*str='s';str="string";补充一点,"string"赋值是他是字符串的首地址(我想你知道);
cout<<*str 输出S嘛,cout<<str 肯定输出string咯;
3.最后这问题,我给你个好的处理方法:
从后往前理解(只是大师的说法,嘿嘿,抄袭下):
const char* p;//指向字符常量, pointer to char const;
char const *p;//同上,一个意思
char* const p;//指向常量字符地址 pointer to const char*;
const char* const p;//常量p指向常量字符地址
const pointer to const char*.
好了,没我的事了.....

热心网友 时间:2023-10-17 07:05

ch相当于一个不能修改地址的指针,指向数组的第一个元素。
ch不能赋空,不过可以初始化,你可以这样声明。
char ch[10] = {'\0'};
就可以把全部元素置空。
str还没分配空间,不能直接存储数据,分配空间后*str=也可以用,不过只表示一个字符。
简单的说ch是个不能修改的指针,str可修改,"string"是个字面值常量,就是个以'\0'结尾的字符数组。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
敬佩韩红作文 我装了windows7家用版64位的 请问能用什么杀毒软件? 电脑360和win7有什么区别为什么那么多人说用win7就不要装360 目前国产的杀毒软件哪个支持64位Windows7的?推荐一款好的杀毒软件 支持Win7的那些国产杀毒软件 小儿原发性肾病综合征由什么原因引起 肾病综合征的发病特点 肾病综合征是怎么造成的 父亲是患老年痴呆死的,母亲很健康,那么我身为女儿会得老年痴呆吗 女老师给8旬父亲布置作业防痴呆,预防老年痴呆你知道有哪些方式?_百度... 字符串数组和字符串指针的区别? 投影仪和液晶电视比较有什么优缺点? C语言中字符串数组与字符指针数组有什么区别 有的人喜欢买液晶电视,有人喜欢买投影仪,俩者之间有什么优缺点? 8. 使用字符指针和字符数组表示字符串时,二者有何区别? 投影仪和电视相比有什么优缺点? C语言中指针定义的字符串和数组定义的字符串的区别 投影与显示器的优缺点 C语言中字符串数组与字符指针数组有什么区别?怎么用 投影仪和电视应该怎么选,分别都有哪些优缺点? 字符数组和字符指针的区别与联系 字符指针变量和字符数组的区别 现在家里都流行装投影仪了,投影仪相较于液晶电视有什么优势? c语言字符串数组和字符串指针数组的区别? 电视好还是投影仪好?电视和投影仪的优缺点分别有哪些? 简述字符串数组和字符指针的区别,举例说明。 投影电视优缺点 字符数组和字符指针的区别 现在越来越多人喜欢安装投影,投影真的比电视好吗? 数组和指针的区别,字符数组和字符串指针区别 观感体验好,投影仪到底比电视机好在哪里? C++ 字符数组和字符指针 投影机和液晶电视机有什么优缺点? 关于字符数组,字符指针和字符串之间的赋值问题 液晶电视和家用投影仪相比,各自有什么优劣势? 通过指针处理字符串和通过数组处理字符串有什么区别? 小龙虾煮30分钟会不会太老? 自制小龙虾,虾要煮多久相对好一些? iphone 6splus ios 怎么进入刷机模式? 苹果6s plus 怎么刷机? 龙虾蒸多久能熟? iphone6splus怎么刷机?刷回原来的系统?? 苹果6splus怎么升级必须用wifi iphone 6s plus忘记密码和id怎么刷机 苹果6splus系统怎样升级成10? 如何 设置 默认的python路径 如何设置python模块的默认搜索路径 python安装的包文件在哪个文件夹 如何设置python模块的默认搜索路径? python一般文件在哪个位置