C字符阵列创建差异

时间:2014-12-13 22:29:38

标签: c++ c arrays printing printf

在C中我注意到有几种方法可以声明一个char数组。有什么区别:

  1. char arr[10] = "abcdefghij";
    
  2. char* arr2[10] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"};
    
    • gcc说我需要2后的char而不是1中的星号。
    • 打印时1我可以使用printf("%s\n", arr); and it prints abcdefghij@
    • 打印时2我必须使用for循环
  3. 为什么他们不同?

4 个答案:

答案 0 :(得分:2)

因为1是一个char数组,而第二个是一个数组数组,因为" a"实际上是一组2个字符' a'和' \ 0'

答案 1 :(得分:1)

arr是10个元素的char的向量,arr2是10个元素的chars指针的向量

char arr2[10] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};

等于arr

答案 2 :(得分:1)

要理解这种行为,您必须知道字符串和字符之间的区别。前者使用"创建,可以包含多个字符,而后者使用'创建,仅代表一个字符。由于您在数组初始化中使用了",因此您创建了一个字符串数组,而不是字符。现在字符串通过指向字符的指针来表示。因此编译器希望您创建一个指向字符的指针数组,而不是字符数组。

答案 3 :(得分:1)

在第一个中你只是声明一个字符串,但在第二个中你创建了10个指向10个字符串的指针。作为一个例子

char* arr2_0 = "a" ;
char* arr2_1 = "b" ;
char* arr2_2 = "c" ;
char* arr2_3 = "d" ;
char* arr2_4 = "e" ;
char* arr2_5 = "f" ;
char* arr2_6 = "g" ;
char* arr2_7 = "h" ;
char* arr2_8 = "i" ;
char* arr2_9 = "j" ;