1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

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,285
    Likes Received:
    364
    Trophy Points:
    83
    So whats your query?
     
  4. xpi0t0s

    xpi0t0s Mentor

    Joined:
    Aug 6, 2004
    Messages:
    3,012
    Likes Received:
    203
    Trophy Points:
    0
    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