*array []是什么意思?

Dag*_*len 3 c arrays

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

char *somarray[] = {"Hello"};
Run Code Online (Sandbox Code Playgroud)

这是什么意思 ?

如果我打印它:

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

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

*somarray - >给我一个常量的内存地址

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

到底是怎么回事?

Gri*_*han 7

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

char *somarray[] = {"Hello"}; 
Run Code Online (Sandbox Code Playgroud)

somarray[]是阵列char*.这个数组大小是1,包含字符串的地址,"Hello"如:

somarray[0] -----> "Hello"
Run Code Online (Sandbox Code Playgroud)

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

&somarray 表示数组地址

*somarray 表示第一个元素的值

假设"Hello"字符串的地址是例如201,并且数组somaaray423地址,那么它看起来像:

+----+----+----+---+---+----+----+----+---+----+ 
| `H`| 'e'|'l'|'l'|'o'| '\0'|   
+----+----+----+---+---+----+----+----+---+---+----+  
 201   202  203 204 205 206  207   208 209 210  2
 ^
 | 
+----+----+
| 201     |
+----+----+
 423
somarray
Run Code Online (Sandbox Code Playgroud)

和:

somarray423

&somarray423

*somarray201

指出要注意 somarray&somarray给出相同的值但在语义上两者都是不同的.一个是第一个元素的地址,另一个是数组的地址.读这个答案.