tags:

views:

90

answers:

2

Possible Duplicate:
Sizeof an array in the C programming language?

Why is the size of my int array changing when passed into a function?

I have this in my main:

int numbers[1];
numbers[0] = 1;
printf("numbers size %i", sizeof(numbers));
printSize(numbers);
return 0;

and this is the printSize method

void printSize(int numbers[]){
printf("numbers size %i", sizeof(numbers));}

You can see that I dont do anything else to the numbers array but the size changes when it gets to the printSize method...? If I use the value of *numbers it prints the right size...?

+1  A: 

Well, you're just getting the size of the pointer to an int. Arrays are just fancy syntax for pointers and offsets.

Daniel Egeberg
An array is not a pointer.
anon
We need a "don't parse HTML with regex" equivalent for that assertion.
detly
@Neil Butterworth : "arrays" are not pointers, but it is true that the "array syntax" in C is just syntactic sugare for `*(ptr + index)` !! -1 if I could to the comment
ShinTakezou
Right. I would have thought it was obvious that I meant the array *syntax* when I was talking about something being "fancy syntax" for something else...
Daniel Egeberg
That completely fails to explain how the first part of their code works as they expected, but not the second.
detly
+7  A: 

Any array argument to a function will decay to a pointer to the first element of the array. So in actual fact, your function void printSize(int[]) effectively has the signature void printSize(int*). In full, it's equivalent to:

void printSize(int * numbers)
{
    printf("numbers size %i", sizeof(numbers));
}

Writing this way hopefully makes it a bit clearer that you are looking at the size of a pointer, and not the original array.

As usual, I recommend the C book's explanation of this :)

detly