Home > Software design >  Why does the compiler return a useless value after I dereference it and perform some operation on it
Why does the compiler return a useless value after I dereference it and perform some operation on it

Time:06-16

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.

CodePudding user response:

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)

CodePudding user response:

The expression

*j  

is first dereferencing the pointer and then incrementing it. You want to increment the referenced value and leave the pointer untouched. This can be achieved by the following expression:

*j  = 1
  • Related