Search code examples
cpointerslvaluepost-incrementpre-increment

pointer increment and dereference (lvalue required error)


I am trying to understand how pointer incrementing and dereferencing go together, and I did this to try it out:

#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;
}

I expected this code to do one of these:

  1. First dereference then increase the pointer (printing word1)
  2. First dereference then increase the value (printing ord1)
  3. Dereference pointer + 1 (printing word2)

But compiler won't even compile this, and gives this error: lvalue required as increment operand am I doing something wrong here?


Solution

  • You cannot increment an array, but you can increment a pointer. If you convert the array you declare to a pointer, you will get it to work:

    #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;
    }