【问题标题】:What does *array[] means? [duplicate]*array[] 是什么意思? [复制]
【发布时间】:2013-03-29 16:53:11
【问题描述】:

在c中,如果我声明类似:

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

这是什么意思?

如果我打印它:

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

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

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

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

发生了什么?

【问题讨论】:

  • 为什么因为没有建设性而被关闭?
  • 这应该是“重复的”而不是“不具建设性的”。

标签: c arrays


【解决方案1】:

*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

和:

somarray423

&somarray423

*somarray201

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

【讨论】:

  • 这很有帮助,非常感谢。
  • @DagothUlen 等待发布带有示例的链接,也请阅读。
  • @DagothUlen 也阅读了我的this answer
  • 更好,再次感谢:)
  • @DagothUlen 欢迎 :)
【解决方案2】:

您正在声明一个常量字符串数组,分配在堆栈上。

例如,您可以这样做:

char* strs[] = { "Hello", "world" };

那么strs[0] 将指向常量字符串“Hello”,strs[1] 将指向“world”。

【讨论】:

  • 为什么投反对票...?
【解决方案3】:

我更喜欢这样理解

char* somearray[]

因为您正在创建一个指针数组。

somearray 中的每个元素都指向一个 char*。

【讨论】:

    【解决方案4】:

    这是一个字符串数组。和这个一样:

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

    也就是说,somarray 的每个元素都是一个字符串。一个字符串,就地是一个指向许多字符的指针。

    【讨论】:

      【解决方案5】:

      你可能想做的是:

      char somearray[] = {"Hello"};
      

      您所做的是通过以下方式创建指向指针的指针:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 2019-09-12
        • 2015-01-22
        • 1970-01-01
        • 2012-05-04
        相关资源
        最近更新 更多