<分区>
在 c 中,如果我声明如下内容:
char *somarray[] = {"Hello"};
这是什么意思?
如果我打印它:
somarray
-> 给我一个栈中的内存地址
&somarray
-> 同样的东西,堆栈内存地址,但是..
*somarray
-> 在常量中给我一个内存地址
我实际上可以使用 *somarray
来打印字符串。
这是怎么回事?
<分区>
在 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.
关于c - *array[] 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15707732/