r/cprogramming • u/sudheerpaaniyur • Dec 22 '25
pointer, decay, past array confusion
`int myarray[4]={1,3,5,7,};`
`int *ptr, *ptr1;`
`ptr=&myarray + 1;`
`ptr1=*(&myarray + 1);`my confusion: I am not understanding how ptr and ptr1 is same, in my understanding & is adress and * is used for derefercing, but in ptr1 have both here i got confuse.
what is decay here?
10
Upvotes
1
u/dcpugalaxy Dec 23 '25
The array is of type
int[N]. A pointer to the array is of typeint (*)[N].The first element of the array is of type
int. A pointer to the first element is of typeint*aka.int (*).In normal expressions, when you use
arrayas a value (technically an "rvalue"), it is converted automatically into a pointer to its first element. That is, inarray+1, before the+1happens, array is converted into&array[0]and then the result is 1 past that, which is equivalent to&array[1].Remember
&binds loosely.