我对编程很新,我真的对字符串和数组感到困惑。根据我在网上和我的书中所读到的,一个字符串只能包含字符(字母而不是数字),而数组只能包含整数(数字而非字母)。我的这些概念是错误的吗?
答案 0 :(得分:1)
你的观念是错误的
在c中,没有字符串作为数据类型。 String是一个元素数组,可以表示字符。旧的ascii表只包含256个字符(8位无符号数)。数组中的前0个数字被解释为字符串的结尾。数组中的每个数字表示根据ascii代码页的符号。
char a[10] = {'o', 'n', 'e', '\0'};
char b[10] = {111, 110, 101, 0};
这里a和b相等。你也可以
int x = a[0];
和x将保留'o'字符,即111号。所以
printf("%d", a[0]);
将输出111和
printf("%c", a[0]);
将打印o。因为它是数字,你可以比较字符
if ('o' > 'A')
是事实,因为(int)'o'== 111和(int)'A'== 65.但是8位太少而不能保留许多不同的字符。因此,其他类型可用于保持字符,例如,wchar_t在unicode中很流行。所以,string可以是wchar_t,int或者你喜欢的任何数组。
答案 1 :(得分:1)
尝试这些,应该清除所有当前/未来的疑虑。
阵列:http://en.wikipedia.org/wiki/Array_data_structure
字符串:http://en.wikipedia.org/wiki/String_%28computer_science%29
答案 2 :(得分:0)
数组是一系列值,其中值可以是任何类型。你可以有一个整数数组:
int a[10]; // an array of 10 integers
双精度浮点数的数组:
double b[10]; // an array of 10 doubles
指向整数的指针数组:
int *c[10]; // an array of 10 pointers
包含10个字符的数组:
char d[10]; // an array of 10 characters
等等。类型也可能更复杂 - 你可以有结构数组等。
C没有专门针对字符串的内置类型 - 字符串只是字符数组。按照惯例,为了与大量现有C代码兼容,C中的字符串以空值终止,即它们以值为0的字符'\0'
结尾。当人们在C编程的上下文中谈论“C字符串”或“字符串”时,它们意味着以空字符结尾的字符序列。字符串不一定必须创建为数组(如char e[255]
) - 它可能使用类似malloc()
的函数创建,但由于数组只是一个连续的值列表无论如何都得到相同的结果。
答案 3 :(得分:0)
在字符串中,最后一个字符是'\ 0'(空字符),表示该字符串已结束。
例如
int array[10]; //array of 10 ints
char string[10]; //string or character array of length 10
float aa[10]; //It can stores 10 float values
答案 4 :(得分:0)
简单:
在C
string
中array
包含chars
。
当您说“数组不能只包含int
”时,您并不完全正确。数组只能包含一种数据,而不仅仅是整数;
int a[] = {1, 2, 3, 4, 5}; // Array of ints
double b[] = {1.1, 2.2, 3.3, 4.4, 5.5}; // Array of doubles
char[] = {'a', 'b', 'c'}; // Array of chars, also called string.
答案 5 :(得分:0)
首先,要意识到术语'字符串'是从术语'字符串字符'演变而来的。 'char of char'的一个很好的定义可能是“在记忆中彼此相邻的一些char值”。
有什么可能的'char值'?考虑以下char arrays
的初始化:
char array1[8] = {77, 97, 104, 111, 110, 114, 105, 0};
char array2[8] = {0x4D, 0x61, 0x68, 0x6F, 0x6E, 0x72, 0x69, 0x00};
char array3[8] = {'\x4D', '\x61', '\x68', '\x6F', '\x6E', '\x72', '\x69', '\x00'};
char array4[8] = {'M', 'a', 'h', 'o', 'n', 'r', 'i', '\0'};
char array5[8] = "Mahonri";
以上任何一项都可以归类为“字符串”吗?当然。它们都是'char字符串'以及'char数组'。这些术语是可以互换的。
现在考虑以下事项:
int string1[8] = {77, 97, 104, 111, 110, 114, 105, 0};
int string2[8] = {0x4D, 0x61, 0x68, 0x6F, 0x6E, 0x72, 0x69, 0x00};
int string3[8] = {'\x4D', '\x61', '\x68', '\x6F', '\x6E', '\x72', '\x69', '\x00'};
int string4[8] = {'M', 'a', 'h', 'o', 'n', 'r', 'i', '\0'};
int string5[8] = {L"Mahonri"};
以上是'int'字符串或'int arrays'。对于那些将术语“字符串”与“字符”类型相关联的人来说,这可能难以接受。然而,这是“字符串”和“数组”这两个术语的正确使用。
因此,引用'i> {any type} '的字符串并不合适,因为引用'i> {any type} ”。
所以,关于声明:...A string can only hold char's (letters and not numbers) and arrays can hold only ints ( numbers and not letters).
我倾向于将这句话称为“废话”。
有人说;术语“字符串”一词被称为“字符串字符串”,以及“C字符串”。 “C字符串”的良好定义可能是“在内存中彼此相邻的多个char值,其中字符串中最后一个相关字符的值通常为零”。
'C string'可以被称为'char数组'吗?是。
因此,术语“字符串”本身实际上是模棱两可的。也许使用术语“C字符串”或“字符串字符串”将更加明确。但是,这两个术语都可以称为“char数组”。
问题中表现出的困惑在于寻找“字符串”和“数组”之间的差异,而实际上并没有区别。