这已经持续了很长一段时间。 我试图声明一个char数组我知道string是一个char数组的事实。 但我想知道的是,当我宣布一些例如一个字符数组时 注意我的意思是字符不是像
那样的字符串 char alphabet[26]={"a", "b" ,"c" ......"z"}
与
相同char alphabet[]="abcd...z"
让我说我会做一个冒泡排序(我知道很慢)来切换字母顺序其他方式处理那些2有什么不同吗? 真的很好奇。
答案 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";
然后没有空终止符。这不是一个好主意。