is `char** val` the same as `char* val[ ]` when is the formal ( `char** val`) used

## All 4 Replies

is `char** val` the same as `char* val[ ]`

Only as formal parameters in a function definition. Otherwise, they're not. I'm assuming we're talking about parameters for the answer to your next question.

when is the formal (`char** val`) used

I'll use the array notation when I'm absolutely sure that the function is intended to work with an array or simulated array. I prefer to use pointer notation when the object is known to not be an array or whether it's an array is unknown.

so if i get you, they are all array notation but `char** val` is implicite and
`char* val[]` is explicite
because i just noticed that using `int main (int argv, char** argc)` worked the same way as `int main (int argv, char* argc[])`

they are all array notation but `char** val` is implicite and `char* val[]` is explicite

It's the other way around. They are all pointers, and the [] option is syntactic sugar to highlight the intention that the parameter is an array. But also note that this equivalence only applies to the first dimension of a the array notation. All subsequent dimensions require a size and represent array types. Consider this:

``````int main()
{
int a[2][4];

foo(a);
}
``````

foo() must be declared in one of two ways:

``````void foo(int a[][4]);  /* First dimension decays into a pointer */
void foo(int (*a)[4]); /* Explicitly stating the first dimension as a pointer */
``````

It's a common misconception that the double pointer type corresponds to a 2D array, which is false:

``````void foo(int **a); /* Fails to compile */
``````

ok ok ok thanks a lot
question solved

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.