Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

I cant understand why i get such an output?

  1. Oct 15, 2008 #1
    i cant understand why i get such an output??

    Code (Text):

    int array[] = { 45, 67, 89 };    //1st ine
     int *array_ptr = &array[1];   //2nd line
    printf("%i\n", array_ptr[1]);   //3rd line

     
    the second line links the pointer *array_ptr with the value of cell "1"
    but in the third line it should have print the address of cell "1"
    not its value 89

    i think that if i want to print cell one we need to change this line into

    Code (Text):

    printf("%i\n",*array_ptr[1]);
     

    why i get the value of cell "1"
    when by my logic i should get the adress of cell "1"

    ??
     
  2. jcsd
  3. Oct 15, 2008 #2
    Re: i cant understand why i get such an output??

    First of all, all arrays in C start at element ZERO.
    So, the second line sets the "array_ptr" to the second cell's address of "array".
    Then "array_ptr + 1" is the pointer to the third cell of "array".
    And finally, array_ptr[1] is the content of the third cell of "array".
    Of course, you could write it as "*(array_ptr + 1)" , too.
     
    Last edited: Oct 15, 2008
  4. Oct 15, 2008 #3
    Re: i cant understand why i get such an output??

    And the suggestion "*array_ptr[1]" it is not what you would like it was...
     
  5. Oct 15, 2008 #4

    KTC

    User Avatar

    Re: i cant understand why i get such an output??

    Let's take it one line at a time.

    Code (Text):
    int array[] = { 45, 67, 89 };    //1st ine
    An array of int of 3 elements, with indexes from 0 to 2. So we have array[0] = 45, array[1] = 67, and array[2] = 89.

    Code (Text):
    int *array_ptr = &array[1];   //2nd line
    &array[1] is the same as &( array[1] ). So, we are assigning the address of array[1] to the pointer to int array_ptr. In other word, array_ptr now contain the address of the variable with the value 67.

    Code (Text):
    printf("%i\n", array_ptr[1]);   //3rd line
    First thing to remember is that in C, array and pointer is (almost always) inter-changable in certain context. array_ptr is a pointer, but when used as an array will start "counting" from where it is pointing to at that time. So, since [1] mean the second element of an array, array_ptr[1] mean the 2nd element of the "array" array_ptr, i.e. one past what it's pointing to now. And since it's currently pointing to array[1], that will be array[2], which holds the value 89, which is what's printed.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: I cant understand why i get such an output?
Loading...