ra*******************@gmail.com wrote:
if we have a declaration
int arr[] = { 1,2,3,4,5};
int *ptr;
what is the diff betn ptr = &a and ptr = a ;
You will get warning in 'ptr = &a'
"warning: initialization from incompatible pointer type"
and you wont get warning in 'ptr = a'
Basically, &a return pointer to array of integer of size 5. And , a
return pointer to integer.
We can experiment this by following statements;
( (unsigned long )(&a + 1) - (unsigned long )(&a) ) , this will
return 5 * 4 = 20 (Assume : sizeof(int )= 4 )
and
( (unsigned long )(a + 1) - (unsigned long )(a) ) will return 4;
#include<stdio.h>
int main()
{
int a[5];
int *ptr = a;
int *ptr1 = &a ;/*warning: initialization from incompatible
pointer type*/
int (*ptr2)[5] = &a;
printf("%d\n",(int) ( (unsigned long )(&a + 1) - (unsigned
long )(&a) ) );
printf("%d\n",(int) ( (unsigned long )(a + 1 ) - (unsigned
long )(a ) ) );
return 0;
}