I cant understand why i get such an output?

  • Thread starter Thread starter transgalactic
  • Start date Start date
  • Tags Tags
    Output
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
3 replies · 2K views
transgalactic
Messages
1,386
Reaction score
0
i can't understand why i get such an output??

Code:
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:
printf("%i\n",*array_ptr[1]);
why i get the value of cell "1"
when by my logic i should get the address of cell "1"

??
 
Physics news on Phys.org


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:


And the suggestion "*array_ptr[1]" it is not what you would like it was...
 


Let's take it one line at a time.

Code:
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:
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:
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.