请问字符串和字符数组的区别是什么?

如题所述

区别一:定义不一样

1、字符串指针变量本身是一个变量,用于存放字符串的首地址。字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。

2、字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

区别二:对字符串指针方式不同

1、char *ps=”C Language”;可以写成char *ps;ps=”C Language”;

2、数组方式char st[]={”C Language”};不能写成char st[20];

   St={”C Language”};只能对字符数组的各元素逐个赋值。

扩展资料

字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的。

如s=“abcdefghij”,则s[1]=“b”,s[9]="j",而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

字符串数据类型是建模在形式字符串的想法上的数据类型。字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。在某些语言中它们可作为基本类型获得,在另一些语言中做为复合类型获得。

多数高级语言的语法允许通常用某种方式引用起来的字符串来表示字符串数据类型的实例;这种元字符串叫做“文本”或“字符串文本”。

参考资料来源:百度百科—字符串

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-12

1、结束标志不同

字符串:必须以'\0'结尾;//  ‘ \0 ’ 的意义是“字符串结束符”。

字符数组:可以包含多个'\0',但是如果当做字符串处理,则实际有效字符串为第一个'\0'的签名的字符串,如果当做字符数组处理,可以处理字符数组的任何一个字符,所有的字符都可以是'\0'。

2、特点不同

字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“b”,s[9]="j"。

而字符串的零位正是它的长度,如s[0]=10(※上述功能Ansistring没有。),这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

字符数组是指用来存放字符数据的数组。其定义的一般形式为: char 数组名[数据长度] 。字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用一个字节。C语言中没有字符串类型,字符串是存放在字符型数组中的。

扩展资料:

字符串的数据类型:

字符串数据类型是建模在形式字符串的想法上的数据类型。字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。

在某些语言中它们可作为基本类型获得,在另一些语言中做为复合类型获得。多数高级语言的语法允许通常用某种方式引用起来的字符串来表示字符串数据类型的实例;这种元字符串叫做“文本”或“字符串文本”。

字符数组的初始化:

字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。

用字符常量逐个初始化数组。例如:char a[8]={'i','l','o','v','e','y','o','u'};把8个字符依次分别赋给c[0]~c[7]这8个元素。

参考资料来源:百度百科--字符数组

参考资料来源:百度百科--字符串

本回答被网友采纳
第2个回答  推荐于2017-11-25
区别吗 字符串有结束符,字符数组没有结束符(自己可以加上,如果是用系统函数输入的,系统会自动加)。总的来说是没有区别的,字符串就是以字符数组形式存储的。你可以把一个字符串看成是一个字符数组,可以按数组那样操作。两者没有本质的区别,只是在不同的情况下有不同的叫法。
楼下说的字符串类,其实就是对字符串的封装,加上了一些对字符串的操作方法,其内部字符串的存储格式在本质上没有改变,就像数据结构一样,字符串的存储可以有很多种(像数组,链表,如果可以用树结构也没关系),然后再加上一组对字符串结构的操作函数。所以从数组结构来说,字符串和字符数组没有本质上的区别,如果是链表或其它结构,也可以做到在最上层的操作是一样,至于低层的结构,完全可以对用户 无关。本回答被提问者和网友采纳
第3个回答  2019-06-18
赞同以上的网友说的处理方式不同,我来完善一下。
一、字符串
"ABC"//这是一个字符串常量(也叫字符串字面量)

上面的例子就是一个字符串,看似其有3个字符,实际上的处理是4个字符,包括C后面的'\0'字符也就是空字符null。编译器遇到空字符就结束处理了。
在编程中也可以把字符串放到字符串数组当中处理:
char str1[] = "ABC";//编译器会自动计算字符串的长度
char str2[20] = "ABC";//这是一个字符串数组
用双引号括起来的内容被视为指向该字符串储存位置的指针,类似于把数组名作为指向该数组位置的指针。
也可以这样初始化一个字符串数组:
char str3 [4] = {'A','B','C','\0'};//字符串的数组的长度要确保比字符串长度多1以便为了容纳'\0'
注意:没有最后的空字符,这就不是一个字符串,而是一个字符数组,所有未被初始化的元素都被自动初始化为空字符'\0'。
不要这样初始化字符串数组:
char dont [] = {'A','B','C'};
这样编译器会不知道从哪里停止,直到找到内存中最近的一个空字符,好在内存中空字符很多,不会花费太长时间。

二、字符数组
字符数组与字符串数组的最大区别是处理范围不同,字符串数组遇到空字符便结束,而字符数组可以根据编程者的需要控制处理的长度。但是和字符串数组一样的是,字符数组的最后一个字符也一定是空字符,如下的初始化无法通过编译:
char str4 [1] = {'A','B'};//错误:初始值设定太多

声明数组时(包含字符数组),数组大小必须是可求值的整数。在C99新增变长数组之前,数组的大小必须是整型常量,包括由整型常量组成的表达式。
int n = 8;
char str5[2*sizeof(int)+1];//有效
char str6[n];//c99后有效的变长数组
在不越界的情况下,开发者可以根据需要编程处理字符数组。
与处理字符串不同,碰到空字符编译器会继续处理空字符后面的数据。
例如:
char str7 [3] = {'A','\0','C'};
str7[1] = 'B';
第4个回答  2013-06-13
字符串:必须以'\0'结尾
字符数组:可以包含多个'\0',但是如果当做字符串处理,则实际有效字符串为第一个'\0'的签名的字符串,如果当做字符数组处理,可以处理字符数组的任何一个字符,所有的字符都可以是'\0'

假设一个字符指针指向字符串“aaaaaa”,如果通过指针下标是第三个a为'\0',则字符指针就只有三个长度,如果你的下标超过3则越界,字符数组只要不超过数组大小就不越界
相似回答