这个问题已经有了答案:
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.