. Now my basic question is :
when i do this ----------- call(&z)
I send the address of the pointer to the array(i.e z)
But when i do this----------call(z)
I send the pointer to the array.
Now void sinks both of them
And with both calls to function call it gives the same result i.e no difference between pointer to an array and the address of the pointer to an array and also

First, read the "Before you make a query" thread, specifically regarding the use of code tags around code. Poor Shabbir is not supposed to have to act like your mommy and pick up after you.

The only reason "C++ no way can do dat" is because the code is valid C, but not valid C++. You can quote that the next time that someone tells you that C is just a subset of C++.

C++ is a more heavily typed language than C. It will not presume that a function declaration with no return type declared will return an int. It will not presume that a void pointer can be implicitly cast to any other type of pointer (use of malloc also points this out).

If you merely convert your code to appropriate C++ code (see the example), the program will perform in precisely the same way. The reason that it does so is that both languages are required to provide a conversion from the address of an array to a pointer to the first byte of an array.

I am sorry for the poor representation. Your above solution explicitly type casts it . That is fine .
In C when you pass z or &z it takes the same address i.e the address of the first element . But when you allocate the memory through malloc then it shows different addresses . This was the result i saw with gcc. Is this compiler specific , as i have never seen that before.

Malloc returns a pointer to the first byte of the allocated memory, period. The only reference to subsequent elements is via pointer arithmetic and not via a conversion of a label representing an address to a pointer to that address. Perhaps you'd like to have a look at the pointer tutorial referenced in my signature.

In any event, one should use C++ if one is using C++. Writing C as C++ typically results in trash programming. The use of malloc over new is merely one small example. Explorations into a compiler's specific reaction to unspecified or undefined behavior is almost always time wasted. Such behavior often changes with the next version.