是字符数组与c中的字符串完全相同

时间:2014-04-09 03:24:49

标签: c arrays string char

这已经持续了很长一段时间。 我试图声明一个char数组我知道string是一个char数组的事实。 但我想知道的是,当我宣布一些例如一个字符数组时 注意我的意思是字符不是像

那样的字符串
 char alphabet[26]={"a", "b" ,"c" ......"z"}

相同
char alphabet[]="abcd...z" 

让我说我会做一个冒泡排序(我知道很慢)来切换字母顺序其他方式处理那些2有什么不同吗? 真的很好奇。

1 个答案:

答案 0 :(得分:0)

不,字符串和char数组完全不同,但char数组可能包含字符串。

数组是类型的数据字符串是数据布局

数组是一个由一些指定元素类型的连续序列组成的对象。

根据定义,C中的字符串是“由第一个空字符终止并包括第一个空字符的连续字符序列”(参考:N1570 7.1.1,第1段)。

虽然终止空字符是字符串的一部分,但字符串的 length 定义为“空字符前面的字节数”。

例如:

char arr[10] = "hello";

数组arr有10个元素,值为{ 'h', 'e', 'l', 'l', 'o', '\0', '\0', '\0', '\0', '\0', '\0' }

数组对象arr的前6个字节包含字符串,其值为{ 'h', 'e', 'l', 'l', 'o', '\0' },或等效地为"hello"

至于您的声明,如果您将双引号更改为单引号,则第一个声明有效:

char alphabet[26]={'a', 'b', 'c', ..., 'z'};

但数组alphabet不包含字符串,因为没有终止'\0'空字符。

在你的第二份宣言中:

char alphabet[]="abcd...z";

alphabet长度为27个字节,因为字符串文字隐式指定存在尾随空字符。

一个例外:如果字符串文字的长度与数组的指定大小完全相同:

char not_a_string[5] = "hello";

然后没有空终止符。这不是一个好主意。