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

Muh*_*ima 4 c

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

char *array[]= { "something1", "something2", "something3" };
Run Code Online (Sandbox Code Playgroud)

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

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

Jef*_*ski 6

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

这段代码

char *array[]= { "a", "b", "c" };
Run Code Online (Sandbox Code Playgroud)

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

char *array[3];

array[0] = "a";
array[1] = "b";
array[2] = "c";
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

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


D S*_*ley 6

那意味着什么 ?

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

那个指针指向什么?

它应该指向char*数组中的第一个元素

怎么分配在内存中?

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

array --> pointer to three sequential memory addresses

array[0] --> something1{\0}
array[1] --> something2{\0}
array[2] --> something3{\0}
Run Code Online (Sandbox Code Playgroud)

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

以及如何访问每个元素

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

for(int i=0; i<3; i++)
{
    char* element = array[i];
}
Run Code Online (Sandbox Code Playgroud)

以及该数组中元素的每个字符

好吧,您可以使用数组语法(element[i])访问字符,但我建议使用C字符串函数以确保安全(因此您不必担心访问字符串范围之外的内存)