Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Why is C not consistent

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.

Name: Anonymous 2012-05-11 7:49

>>24
We learn new things everyday
you can declare structs without fields so no base types
pointers do not require a base type since the base type does not affect it's behavior, it's just for warning issues, an address is an address
arrays default to allocation and a pointer type, it doesn't make sense to use an array in declaration of a parameter unless you want to stress out that it is isn't a pointer to something but actually an array of something:
char ** argv vs char * argv[]

tl;dr: array declaration is pointer declaration with explicit space allocation

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List