Home > Software design >  C post increment not working on a pointer but addition assignment does
C post increment not working on a pointer but addition assignment does

Time:11-19

I have a simple function to count words and characters taking two pointers and the file stream:

void countWordsAndChars(FILE *stream, int *pWordCount, int *pCharCount)
{
    int ch = getc(stream);
    while (ch != EOF)
    {
        if (!isspace(ch) && ch != '\n')
        {
            *pCharCount  ; // Does not work
            *pCharCount  = 1; // Works
        }
        else 
        {
            *pWordCount  ; // Does not work
            *pWordCount  = 1; // Works
        }
        ch = getc(stream);
    }
}

If I use the autoincrement operators (*pWordCount ) it doesnt work. But if I use the addition assignment (*pWordCount = 1) it does.

I'm coming from the web dev world and am pretty new to C. Please explain why.

Thanks.

CodePudding user response:

They are different:

*pCharCount ; equals to *(pCharCount ) so it dereferences the pointer (which does not do anything) and then increases the pointer.

*pCharCount = 1; increases the object referenced by the pointer.

If you want to use postincrement operator you need to: (*pCharCount) ;

CodePudding user response:

The answer should become clear by looking at the table of operator precedence.

As you can see in the table, the postfix operator has higher priority than the indirection operator *. (Please do not confuse the postfix operator with the prefix operator, as they have different priorities.)

Therefore, the expression

*pCharCount  

is equivalent to:

*(pCharCount  )

On the other hand, the * operator has higher priority than the = operator, so the expression

*pCharCount  = 1

is equivalent to:

(*pCharCount)  = 1
  •  Tags:  
  • c
  • Related