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

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

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

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

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

那意味着什么 ?

它正在初始化一个包含三个值的字符串数组( 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字符串函数以确保安全(因此您不必担心访问字符串范围之外的内存)

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

这段代码

 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]; 是一个3个指向char的数组。

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]; 

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

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

 for (int i=0; i 

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