* array []是什么意思?

时间:2013-03-29 16:53:11

标签: c arrays

在c中,如果我声明如下:

char *somarray[] = {"Hello"};

这是什么意思?

如果我打印它:

somarray - >给我一个堆栈中的内存地址

&somarray - >同样的事情,堆栈内存地址,但.. ..

*somarray - >给我一个常量

的内存地址

我实际上可以使用*somarray来打印字符串。

发生了什么事?

5 个答案:

答案 0 :(得分:7)

*array[]表示指针数组,在您的示例中:

char *somarray[] = {"Hello"}; 

somarray[]char*的数组。此数组大小为1,并包含字符串"Hello"上的地址,如:

somarray[0] -----> "Hello"

somarray表示数组中第一个元素的地址。

&somarray表示数组地址

*somarray表示第一个元素的值

假设"Hello"字符串的地址例如是201,而somaaray地址的数组423,则它看起来像:

+----+----+----+---+---+----+----+----+---+----+ 
| `H`| 'e'|'l'|'l'|'o'| '\0'|   
+----+----+----+---+---+----+----+----+---+---+----+  
 201   202  203 204 205 206  207   208 209 210  2
 ^
 | 
+----+----+
| 201     |
+----+----+
 423
somarray

和:

somarray提供423

&somarray提供423

*somarray提供201

注意点somarray&somarray给出相同的值,但语义上两者都不同。一个是第一个元素的地址,另一个是数组的地址。 read this answer.

答案 1 :(得分:4)

你正在声明一个在堆栈上分配的常量字符串数组。

你可以这样做:

char* strs[] = { "Hello", "world" };

然后strs[0]会指向常量字符串“Hello”,strs[1]指向“world”。

答案 2 :(得分:1)

我更喜欢将其视为

char* somearray[]

因为你正在创建一个指针数组。

somearray中的每个元素都指向一个char *。

答案 3 :(得分:1)

这是一个字符串数组。它与此相同:

typedef char * string;
string somarray[] = {"Hello"};

也就是说,somarray的每个元素都是一个字符串。一个字符串,就是指向许多字符的指针。

答案 4 :(得分:0)

您可能想要做的是:

char somearray[] = {"Hello"};

你所做的是做一个指针指针:

char *somearray[] = {"Hello"};