在c中,如果我声明如下:
char *somarray[] = {"Hello"};
Run Code Online (Sandbox Code Playgroud)
这是什么意思 ?
如果我打印它:
somarray - >给我一个堆栈中的内存地址
&somarray - >同样的事情,堆栈内存地址,但..
*somarray - >给我一个常量的内存地址
我实际上可以*somarray用来打印字符串.
到底是怎么回事?
*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,并且数组somaaray在423地址,那么它看起来像:
+----+----+----+---+---+----+----+----+---+----+
| `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)
和:
somarray 给 423
&somarray 给 423
*somarray 给 201
指出要注意 somarray并&somarray给出相同的值但在语义上两者都是不同的.一个是第一个元素的地址,另一个是数组的地址.读这个答案.
| 归档时间: |
|
| 查看次数: |
4999 次 |
| 最近记录: |