c - *array[] 是什么意思?

标签 c arrays

<分区>

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

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

这是什么意思?

如果我打印它:

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

&somarray -> 同样的东西,堆栈内存地址,但是..

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

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

这是怎么回事?

最佳答案

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

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

somarray[]char* 的数组。此数组大小为 1,包含字符串 "Hello" 的地址,例如:

somarray[0] -----> "Hello"

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

和:

somarray 给出 423

&somarray 给出 423

*somarray 给出 201

注意点 somarray&somarray 给出相同的值,但语义上两者不同。一个是第一个元素的地址,另一个是数组的地址。 read this answer.

关于c - *array[] 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15707732/

相关文章:

php - 通过索引访问 PHP 字符串数组

Python ctypes 指向结构的指针作为标识符,无需成员访问

c - 在 C 中处理 SIGINT

c - 文件扫描 C 中的二维数组

javascript - 从多个字符串中仅保留一个字符串 - 数组

java - Java中的可变长度(动态)数组

c++ - CMake - 项目级宏添加到应用程序级 target_link_libraries

从动态分配的文件中计算最多重复出现的元音

java - 当对象是数组的一部分时直接访问对象的属性

c - 不兼容的指针类型 - 试图从另一个函数修改数组