c - 指针递增和解引用(需要左值错误)

标签 c pointers lvalue post-increment pre-increment

我试图了解指针递增和取消引用如何结合在一起,我这样做是为了尝试一下:

#include <stdio.h>
int main(int argc, char *argv[])
{
    char *words[] = {"word1","word2"};
    printf("%p\n",words);
    printf("%s\n",*words++);
    printf("%p\n",words);
    return 0;
}

我希望这段代码能够执行以下操作之一:

  1. 首先取消引用,然后增加指针(打印 word1)
  2. 首先取消引用,然后增加值(打印 ord1)
  3. 取消引用指针 + 1(打印 word2)

但是编译器甚至不会编译它,并给出以下错误:需要左值作为增量操作数我在这里做错了什么吗?

最佳答案

您不能递增数组,但可以递增指针。如果将声明的数组转换为指针,您将使其正常工作:

#include <stdio.h>
int main(int argc, char *argv[])
{
    const char *ww[] = {"word1","word2"};
    const char **words = ww;
    printf("%p\n",words);
    printf("%s\n",*words++);
    printf("%p\n",words);
    return 0;
}

关于c - 指针递增和解引用(需要左值错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150428/

相关文章:

c - 声明 void 指针以将类型处理推向下游

c - 修改gcc的补丁认证程序

c - 关于K&R中函数指针的问题

c - 使用指针和指向指针的指针分配内存

c - 为什么 this 的结果不是左值?

c - IOCCC 1987/weSTLey.c - GCC 的左值问题

c - 通过 C 中的 Netlink 从内核到用户空间的多播

c++ - Microsoft header 对声明没有评论,那么文档在哪里?

C - 构建动态分配的指针数组,指向由文件输入填充的结构

c++ - 冒泡排序中赋值 c++ 的左操作数需要左值