Char数组和字符串有什么区别?

Tod*_*ses 16 paradigms

我花时间在高级语言上突然想到我不知道Char数组和字符串之间的区别.我认为它们是相同的但不确定.有区别吗?它只是一个带有抽象的Char数组吗?

Dra*_*mon 20

String 一个抽象,但是是一系列字符.它没有说明实施.如果你想根据链接的字符列表创建一个String实现,那么没有什么能阻止你.

在诸如C之类的语言中,差别很小 - 只是ac字符串是连续地址处以空字符结尾的字符序列,通常通过指针访问.

在OOP语言中,String将是某些String类的对象.这可能会在内部将数据保存在字符数组中,但您不需要知道这一点.字符数组只能是一个简单的数组,但是如果实现者决定,String类可以在字符串上提供许多操作(子字符串,正则表达式等).

  • Haskell是一种语言示例,其中本机字符串实现基于链接的字符列表. (4认同)

Ste*_*owe 11

字符数组只是一个字符数组

字符串是使用字符数组的数据结构

一些字符串表示使用空终止符(如C),其他字符串表示使用长度前缀

  • 我认为"数据结构"具有误导性.经典的C字符串在内存中一个接一个地放置字符,最后一个字节包含二进制零.与最后一个字节除外的数组完全相同. (3认同)
  • 一种以C为中心的答案.有些语言的字符串和数组是非常不同的东西. (2认同)
  • @Steven.也许SO需要"谦逊"或"绅士"徽章? (2认同)

Ces*_*Gon 8

我曾经教过编程,这就是我用来解释这个特殊问题的方法.

首先,关注两者的共同点:char数组和字符串由一系列字符组成.例如,作为序列意味着字符是有序的并且它们可以被枚举.

现在,重点关注这两件事中的每一件事,以他们特定的不同方式,为这个共同点.

一个字符数组添加了任何阵列已知加入:索引和随机访问单个项目.

一个字符串,而另一方面,补充说,字符的序列被看作是与自己的属性一整个事情的事实.在一些实现中,实现这意味着改变字符的存储方式(例如,在C字符串中添加终止空值).

这种方法(看看共性,然后看事情如何与它们分开)已证明在各种情况下都很有用.

希望这可以帮助.