I am attempting to return a dynamically declared array from a function; thus far I am returning a structure to hold a pointer to the memory block that malloc() assigned for the array AND an integer to store the length of the array.
This made me wonder; How does the C Compiler(or whatever) handle an automatic array declared in a program? eg.
main()
{
    //delcare an array holding 3 elements
    int array[] = {1,2,3};
    /*variable to hold length of array
     *size of array / size of 1st element in the array == length of the array
     *this will == 3
     */ 
    int array_Length = (sizeof(array))/(sizeof(*array));
    //call malloc for a block of memory to hold 3 integers(worth of memory)
    int* ptr = malloc(3*(sizeof(int)));
    /*not exactly sure what this formula means when using a pointer???
     *but it seems to always == 1
     */
    int dynamic_array_length = (sizeof(ptr))/(sizeof(*ptr));
    return 0;
}
My point is, the sizeof() operator somehow knows that the automatically declared array has 3 integers within it.  
Or more generally:
sizeof(array)
where array is (N x type_size)
N is the number of elements within the array
type_size is the number of bytes of memory used to store the data type
Are automatic arrays stored with additional information about their size/length?
Are dynamic arrays stored differently? (I know that we control when a dynamic variable is freed from memory)
 
     
     
     
     
     
    