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):


    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


    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.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Similar Threads for cant understand such Date
How to understand dimensionless data of MacCormack's method Yesterday at 5:44 AM
Why cant I create 1 million threads? Feb 9, 2014
Java Cant get the outputfile in Java program Oct 6, 2013
Cant get Vpython to work May 9, 2010
Cant undestand dis code Jun 4, 2006