这个问题已经有了答案:
What does that mean in c? char *array[]= { “**”, “**”, “**” };
5个答案
在C语言中,如果我声明如下:

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

这是什么意思?
如果我打印出来:
somarray->给我堆栈中的内存地址
&somarray->同样的东西,堆栈内存地址,但是..
*somarray->在常量中给我一个内存地址
我可以用*somarray来打印字符串。
怎么回事?

最佳答案

*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.

10-07 12:24