在我读到的一些代码中,有一个像这样的初始化语句
char *array[]= { "something1", "something2", "something3" };
Run Code Online (Sandbox Code Playgroud)
这意味着什么,该指针实际指向什么?如何在内存中分配,以及如何访问该数组中元素的每个元素和每个字符?
---编辑---请问这个例子在char数组之间有什么区别[3]; 和char*array [3]; ---编辑---
这是一种在创建数组的同时初始化数组的方法。
这段代码
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 的数组char。
char *array[3];是一个包含 3 个指针的数组char。
那意味着什么 ?
它正在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字符串函数以确保安全(因此您不必担心访问字符串范围之外的内存)