Clarification with pointer arithmetics eg *ip++ = 0

Discussion in 'C' started by briff, Nov 16, 2008.

  1. briff

    briff New Member

    Joined:
    Nov 16, 2008
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    0
    hi

    if i have a code
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        int a=10, *ip;
        ip =&a;
        ip++;
        printf("ip is %d and a is %d\n",ip,a);
        
        [B]*ip++ = 0;[/B]
        
        
        system("pause");
        return 0;
        
    }
    what do the code in bold do?

    thanks!
     
  2. briff

    briff New Member

    Joined:
    Nov 16, 2008
    Messages:
    4
    Likes Received:
    0
    Trophy Points:
    0
    sorry the quote i bolded it is actually this:

    Code:
    *ip++=0
     
  3. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,375
    Likes Received:
    388
    Trophy Points:
    83
    So whats your query?
     
  4. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,009
    Likes Received:
    203
    Trophy Points:
    63
    Occupation:
    Senior Support Engineer
    Location:
    England
    It's undefined, because ip doesn't point to anything definite.

    If you have something like this instead:
    Code:
    int a[10];
    int *ip = &a[0];
    ip++;
    *ip++=0;
    
    then this will be defined; ip will point to a[1], and the command will dereference and postincrement ip, and write 0 to the resulting address (which is a[1]) and leave ip pointing at a[2].

    Without the first ip++ in your original code the behaviour will be defined because ip points to a; *ip++=0 sets a to 0 and increments ip, which then points to somewhere undefined in memory, and dereferencing the pointer again will lead to undefined behaviour.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice