سؤال

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 ?

هل كانت مفيدة؟

المحلول

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.

نصائح أخرى

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top