Tatai
Tatai

Reputation: 163

Why does the compiler return a useless value after I dereference it and perform some operation on it?

j is a pointer which points to i. The first print statement returns the value of i, but when I try to deference the pointer and increment i by 1, it returns a useless value which I suppose is the address of i. Why does this happen, and where can I read about pointers in more detail?

#include <stdio.h>
    int main( )
    {
        int i = 3, *j;
        j = &i ;
        printf ( "\nValue of i = %u", *j ) ;
        *j++;
        printf ( "\nValue of i = %u", *j ) ;
    }

After *j++ I expect j to point to i and the value of i should now be 4. So when I print *j it should return 4.

Upvotes: 1

Views: 45

Answers (1)

kaylum
kaylum

Reputation: 14046

I think it should print 4

By that I assume you think you are incrementing i. But in fact you are incrementing the j pointer not the content that it is pointing to. This is because the C operator precedence says that ++ has higher precedence than *.

That is, *j++ is doing:

  1. j++
  2. *j

The second step is a no-op as the result is not used.

What you actually want is: (*j)++

Upvotes: 4

Related Questions