I cant understand why i get such an output?

  • Thread starter Thread starter transgalactic
  • Start date Start date
  • Tags Tags
    Output
Click For Summary

Discussion Overview

The discussion revolves around understanding pointer arithmetic and array indexing in C programming. Participants analyze a specific code snippet to clarify why a particular output is produced when accessing array elements through a pointer.

Discussion Character

  • Technical explanation
  • Conceptual clarification
  • Debate/contested

Main Points Raised

  • One participant expresses confusion about why the output is the value 89 instead of the address of the second element in the array, questioning the logic behind pointer usage.
  • Another participant clarifies that arrays in C start at index zero, explaining that the pointer points to the second element of the array, and that accessing array_ptr[1] retrieves the value of the third element.
  • A third participant challenges the suggestion of using "*array_ptr[1]", indicating it does not align with the intended operation.
  • A further breakdown of the code is provided, explaining that array_ptr behaves like an array starting from its current position, thus array_ptr[1] refers to the next element in the original array.

Areas of Agreement / Disagreement

Participants generally agree on the mechanics of pointer arithmetic and array indexing in C, but there is some disagreement regarding the interpretation of the initial confusion about the output.

Contextual Notes

Some assumptions about pointer behavior and array indexing may not be fully articulated, leading to potential misunderstandings. The discussion does not resolve all uncertainties regarding the participant's initial logic.

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"

??
 
Technology 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.
 

Similar threads

Replies
7
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 29 ·
Replies
29
Views
4K
Replies
1
Views
2K
  • · Replies 25 ·
Replies
25
Views
3K
Replies
7
Views
4K
Replies
6
Views
2K
  • · Replies 17 ·
Replies
17
Views
4K
  • · Replies 3 ·
Replies
3
Views
3K
Replies
14
Views
6K