i'm unable to do something simple like pre-defining an array and passing it to a function. for example:
You need to revise your post. You say that you can't do some things. You don't say whether you can't do them because the compiler doesn't allow them, or whether the syntax is valid, but the execution of the code does not have the results you expect. In the latter case, you need to define what the expected results are and what the actual results are.
In your first example, the argument is actually a pointer. The sizeof() macro determines the size of the pointer, which is, obviously, not the same as the size of the array pointed to be the pointer.
There is no way to determine the size of the array pointed to be a pointer. That is why things like strings, which are char arrays, must be NULL terminated. It is the position of the NULL terminator that functions like strlen() locate, to determine the size of the array. It is also why passing a non-NULL-terminated array of chars to a function that expects a string is not a good idea, regardless of the number of people that claim it works.