Question

int main()
{
    int value = 4321;
    int *ptrVal = &value;
    printf("%d %d",++value,(*(int*)ptrVal)--);
    return 0;
}

How does pre-increment/post increment works in above print statement ?

And why is answer 4321 4321 ?

Was it helpful?

Solution

You are modifying the object value twice between two sequence points: you are invoking undefined behavior. Undefined behavior means your program can print 4321 4321, print 42 or even just crash.

A correct version of your program would be:

int value = 4321;
int *ptrVal = &value;

++value;
(*ptrVal)--;  // no need to cast to int *

printf("%d %d", value, *ptrVal);  // same as printf("%d %d", value, value);

Of course you don't need any temporary pointer to achieve this.

OTHER TIPS

The code above is just broken. It is unspecified how it will work or what the answer will be. You need a sequence point between modifications or modifications and accesses.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top