Name: Anonymous 2012-05-10 1:43
Take the following two declarations "int arr[3]" and "int *ptr".
Both require different storage, but in usage both are identical. This behaviour is known, and it is not the consistency I am talking about.
Take the following two declarations:
void funcarr(int a, int arr[3], int c)
{ printf("%d\n", &c-&a); }
void funcptr(int a, int *ptr, int c)
{ printf("%d\n", &c-&a); }
For funcarr, all three arguments are intended to be call by value. So I would expect the stack to contain
a,arr[0],arr[1],arr[2],c
but it does not. The stack contains
a,&arr[0],c
This is *NOT* consistent, and gives a false impression that the elements of arr[] will not change within the lifetime of the function.
Who failed, so I knows whose ass to kick.
Both require different storage, but in usage both are identical. This behaviour is known, and it is not the consistency I am talking about.
Take the following two declarations:
void funcarr(int a, int arr[3], int c)
{ printf("%d\n", &c-&a); }
void funcptr(int a, int *ptr, int c)
{ printf("%d\n", &c-&a); }
For funcarr, all three arguments are intended to be call by value. So I would expect the stack to contain
a,arr[0],arr[1],arr[2],c
but it does not. The stack contains
a,&arr[0],c
This is *NOT* consistent, and gives a false impression that the elements of arr[] will not change within the lifetime of the function.
Who failed, so I knows whose ass to kick.