这在c中意味着什么? char * array [] = {“**”,“**”,“**”};

时间:2013-01-28 20:06:38

标签: c

在我读过的一些代码中,有一个像这样的初始化语句

char *array[]= { "something1", "something2", "something3" };

这意味着什么,指针实际指向的是什么? 如何在内存中分配,以及如何访问该数组中元素的每个元素和每个字符?

---编辑--- 请问这个例子之间的区别是什么 char数组[3]; 和 char * array [3]; ---编辑---

5 个答案:

答案 0 :(得分:5)

  这意味着什么?

它正在初始化一个包含三个值的字符串数组(char *)(三个指向空终止字符串的指针)

  

以及指针指向的是什么?

它应指向char*数组

中的第一个元素
  

如何在内存中分配?

它将分配足够的内存来存储三个字符串,后跟null-terminators,以及指向这些字符串的三个指针:

array --> pointer to three sequential memory addresses

array[0] --> something1{\0}
array[1] --> something2{\0}
array[2] --> something3{\0}

请注意,字符串可能不一定在顺序存储器中

  

以及如何访问每个元素

如果用“element”表示字符串,你可以通过指针循环:

for(int i=0; i<3; i++)
{
    char* element = array[i];
}
  

和该数组中元素的每个字符

好吧,你可以使用数组语法(element[i])访问字符,但我建议使用C string functions来保证安全(所以你不必担心访问范围之外的内存)字符串)

答案 1 :(得分:4)

这是一种在创建数组的同时初始化数组的方法。

此代码

char *array[]= { "a", "b", "c" };

将与此代码具有相同的结果。

char *array[3];

array[0] = "a";
array[1] = "b";
array[2] = "c";

这是获取更多信息的良好来源。

http://www.iu.hio.no/~mark/CTutorial/CTutorial.html#Strings

编辑:

char array[3];是一个3 char的数组。 char *array[3];是一个包含char的3个指针的数组。

答案 2 :(得分:3)

C中的

char *是一个字符串。

array是要声明的变量的名称。

[]表示它是一个数组。

{ "something1", "something2", "something3" }正在初始化数组的内容。

访问元素的方式如下:

array[0]给出第一个元素 - “something1”。

array[1]给出第二个元素 - “something2”。

注意:

正如评论中指出的那样,char *在技术上并不是一个字符串。

这是指向char的指针。您可以在内存中可视化字符串,如下所示:

<-------------------------->
..134|135|136|137|138|139|..
<-------------------------->
  'H'|'e'|'l'|'l'|'o'|'\0'
<-------------------------->

这个内存块(位置134-139)保存着字符串。

例如:

array[0]实际上返回指向“something1”中第一个字符的指针。

您使用以下事实:字符在内存中按顺序以各种方式访问​​字符串的其余部分:

/* ch points to the 's' */
char* ch = array[0];

/* ch2 points to the 'e' */
char* ch2 = ch + 3;

/* ch3 == 'e' */
char ch3 = *ch2;

/* ch4 == 'e' */
char ch4 = *(ch + 3);

/* ch5 == 'e' */
char ch5 = ch[3];

答案 3 :(得分:2)

这定义了一个char指针数组(又名“c strings”)。

要访问您可以执行的内容:

for (int i=0; i<sizeof(array)/sizeof(char*); i++) {
    printf("%s", array[i]);
}

答案 4 :(得分:0)

它将array声明为一个指向char的3个指针的数组,其3个元素初始化为指向各个字符串的指针。内存是为数组本身(3个指针)和字符串分配的。字符串内存是静态分配的。如果声明在函数内部,则静态分配数组的内存(如果声明在所有函数之外)或动态地(通常在CPU的执行堆栈上)分配。