#include<stdio.h>
int main()
{
int a[5]={5,10,15,20,25};
int *p;
int i;
p=a;
for (i=0;i<=5;i++)
{
printf("the address of the %d is = %d\n",*p,p);
p++;
}
return 0;
}
In my program i do not even know that what was happening there because if put the address of operator in seventh line of the code which is =(p=&a)
else I do not put = (p=a)
the address of operator the answer of the running time of the both the case are same.
I was expecting that may be the answer is different in both cases but on both time the answer is same.
i do not even know that what was happening there because if put the address of operator in seventh line of the code which is =(p=&a) else I do not put = (p=a) the address of operator the answer of the running time of the both the case are same.
It is because arrays decay to the reference to its first element. When you use &
you get the same reference but it has a different type.
int main(void)
{
int array[5];
int *pointer_to_int = array;
int *pointer_to_int1 = &array[0];
int (*pointer_to_array)[5] = &array;
printf("%p %p %p %p %zu\n", (void *)pointer_to_int, (void *)pointer_to_int1, (void *)(pointer_to_int + 1), (void *)(pointer_to_int1 + 1), sizeof(*pointer_to_int));
printf("%p %p %zu\n", (void *)pointer_to_array, (void *)(pointer_to_array + 1), sizeof(*pointer_to_array));
}
pointer_to_int
& pointer_to_int1
have type of pointer to int
and reference first element of the array
pointer_to_array
has type of pointer to array of 5 int
elements.When you run the posted program you will get the result (the actual addresses can be different):
0x7ffef9ea1320 0x7ffef9ea1320 0x7ffef9ea1324 0x7ffef9ea1324 4
0x7ffef9ea1320 0x7ffef9ea1334 20
as you can see the pointer arithmetics behaves differently.