【问题标题】:incrementing an array of pointers in C在C中增加一个指针数组
【发布时间】:2011-06-03 10:40:49
【问题描述】:

这可能是一件本质上微不足道的事情,但到目前为止,它有点让我无法理解..

char * a3[2];
a3[0] = "abc";
a3[1] = "def";
char ** p;
p = a3;

这行得通:

printf("%p - \"%s\"\n", p, *(++p));

这不是:

printf("%p - \"%s\"\n", a3, *(++a3));

我在编译时遇到的错误是:

需要作为增量操作数的左值

我做错了什么,为什么以及'a3'的解决方案是什么?

【问题讨论】:

  • a3 变量被声明为一个字符数组,我想你想将它声明为一个指针数组,所以它应该读 char *a3[2] 而不是 char a3[2]
  • 那是复制代码的错误,你是对的,是指针数组,谢谢指出

标签: c arrays pointers


【解决方案1】:

a3 是一个常量指针,你不能增加它。然而,“p”是指向 a3 开头的通用指针,可以递增。

【讨论】:

    【解决方案2】:

    您不能分配给a3,也不能增加它。数组名是常量,不能更改。

    c-faq

    【讨论】:

    • @XXL 你声明它的方式,a3 不是一个指针,句号。您的问题中也可能缺少*char *a3[2]?)
    • 由于粘贴失败,它缺少一个星号,我想听到的是“数组名称是恒定的,因此无法修改” - 这很好地解释了它。您的原始回复中没有该部分,因为它仅在您编辑帖子后出现 - 这就是为什么我问了一个“为什么”的后续问题。无论如何,现在已经解决了,谢谢
    【解决方案3】:

    试试

    char *a3Ptr = a3;
    printf("%p - \"%s\"\n", a3, *(++a3Ptr));
    

    在 C 中,char array[] 与 char* 不同,即使您可以使用 char* 来引用 char 数组的第一个位置。

    “p”和“a3”不都是指向指针的指针吗?

    是的,但 a3 是不变的。你不能修改它。

    【讨论】:

      【解决方案4】:

      a3 是数组的名称。这关于它作为一个常量指针。

      你不能改变它。您可以使用a3 + 1 代替++a3

      另一个问题是使用“%s”作为*(++a3) 参数。由于 a3 是一个 char 数组,*a3 是一个字符,相应的格式说明符应该是 %c

      【讨论】:

      • a3 是一个 char * 数组,所以语法应该没问题...我一开始也看错了...或者它可能在您发布后被编辑。
      【解决方案5】:

      创建后,您不能将任何 char 数组递增或指向其他内容。您需要使用索引进行修改或访问。 like a[1]

      【讨论】:

        猜你喜欢
        • 2015-10-09
        • 1970-01-01
        • 2018-07-28
        • 1970-01-01
        • 2018-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        相关资源
        最近更新 更多