【问题标题】:Strings in C IssuesC 问题中的字符串
【发布时间】:2013-10-01 20:52:38
【问题描述】:

我想知道两者之间有什么区别

char* str[NUM];
char str[NUM];
char* str;

我的理解是,像中间那个这样的数组定义指向第一个值的地址,即str[0]。但我也看到了第一行代码所表示的符号,即指向数组的指针。这三个是等价的吗?我知道数组定义在堆栈中为NUM 字符设置了空间,所以这可能比仅仅更好

char* str?

谢谢

【问题讨论】:

  • 天空不是用砖砌成的。第一行不是指向数组的指针。
  • @KerrekSB 我希望听到一些更有用的东西,它实际上在说什么,一个指向 char 类型的指针数组,但我在其他地方找到了。我感到困惑的是,指针可以指向数组的内存地址,因此使用与初始化时相同的操作。
  • 这是有道理的:“正如 Wayne Throop 所说,它是`指针算术和数组索引 [that] 在 C 中是等价的,指针和数组是不同的。')”
  • @alvarezcl:这是因为对象由 pair(类型、地址)标识。两个不同的对象可以具有相同的地址,只要它们具有不同的类型,数组和数组的第一个元素就是这种情况。

标签: c arrays string character


【解决方案1】:
char* str[NUM];

这是一个NUMchar指针数组

char str[NUM];

这是一个名为 str 的数组,长度为 NUM chars。

char *str;

这是一个指向char类型的指针

【讨论】:

  • 对于最后一个,str 类型 char 的指针,或者等效地是 char* 类型的指针。我知道这就是你的意思,但这不是“这是char 类型的指针”所说的。
【解决方案2】:
char* str[NUM]; 

str 声明为num 指向chars 的指针数组。

char str[NUM];  

str 声明为numchars 的数组。

char* str;  

str 声明为指向char 的指针。

您可以测试这些类型的声明here

【讨论】:

    【解决方案3】:
    char* str[NUM];
    
    • 包含 NUM 个元素的数组。每个元素都是一个指向字符的指针。
      一般而言,这可能是一个字符串数组。
      str[0] 是第一个字符串。
      str[1] 是第二个字符串,依此类推。

      此数组的任何元素都可能为 NULL。

    char str[NUM];
    
    • 具有 NUM 个元素的数组。每个元素都是一个单独的字符。
      通俗地说,这是一个长度为 NUM-1 的固定大小的字符串。
      (最后一个位置是字符串空终止符)
      此字符串不能为 NULL。它可以为空 (""),但始终存在。

    char* str;
    
    • 指向字符的指针。
      一般而言,这是一个字符串,没有特定的固定大小。当您找到空终止符时,您将找到字符串的结尾。
      该字符串可以为 NULL,并且不指向任何内存。

    【讨论】:

    • 不,第一种情况不是字符串数组。它可能是一个指针到字符串的数组,这取决于元素的实际值。字符串是一个字符序列;字符串不能是指针。
    • 我写道,“在常用术语中,这是可能的数组弦”。我仍然觉得这是一个准确的近似值,有助于理解。
    • 这可能是一个准确的陈述,但如果是这样,它仅仅意味着“常用术语”是错误的。字符串不是指针。数组实际上是指针的错误想法是对 C 语言最大和最常见的误解之一。请不要进一步传播它。
    【解决方案4】:
    char* str1[NUM]; // an array of size NUM of pointers to char
    char str2[NUM];  // an array of size NUM of char
    char* str3;      // a pointer to char
    

    这些的用途可能是:

    str1[NUM-1] = strdup("foo");
    strcpy(str2, "foo");
    str3 = strdup("foo");
    

    【讨论】:

    • 大小不是等于NUM而不是N吗?
    • 是的。对此感到抱歉。
    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2021-01-10
    相关资源
    最近更新 更多