What is wrong if I declare main something like this?
const int MYMAX_PARA=10;
int main(int argc, char *(*argv)[MYMAX_PARA], char *env[])
printf("%s %s",(*argv)[1],env[2]);
When I want to pass a double by reference I use 'pointer to double'.
When I want to pass a structure by reference I use 'pointer to structure'.
Then why not 'pointer to array' when passing array by reference?
Why is there and exception in case of arrays?
I try to think why array-to-pointer 'decay' occurs in C/C++,
I think of above example.
To me, the answer is about simplicity of coding. In above
example, argv++ won't give you next argument but rather next
array of arguments. To get next argument you need to do (*argv)[2]
(*argv)[3] and so on. So decay simplifies your coding and avoids
pointer to array syntax.
This rules out char *(*argv)[].
And BTW, third parameter in main is 'recommended' by standard.
Standard demands:
int main() { /* ... */ }
AND
int main(int argc, char* argv[]) { /* ... */ }
be allowed.
An excerpt from C++98 standards section 3.6.1 [basic.start.main]
"[Note: it is recommended that any further (optional) parameters be added after argv. ]"
It is upto you to discover what the third para means on your favorite platform.
const int MYMAX_PARA=10;
int main(int argc, char *(*argv)[MYMAX_PARA], char *env[])
printf("%s %s",(*argv)[1],env[2]);
When I want to pass a double by reference I use 'pointer to double'.
When I want to pass a structure by reference I use 'pointer to structure'.
Then why not 'pointer to array' when passing array by reference?
Why is there and exception in case of arrays?
I try to think why array-to-pointer 'decay' occurs in C/C++,
I think of above example.
To me, the answer is about simplicity of coding. In above
example, argv++ won't give you next argument but rather next
array of arguments. To get next argument you need to do (*argv)[2]
(*argv)[3] and so on. So decay simplifies your coding and avoids
pointer to array syntax.
This rules out char *(*argv)[].
And BTW, third parameter in main is 'recommended' by standard.
Standard demands:
int main() { /* ... */ }
AND
int main(int argc, char* argv[]) { /* ... */ }
be allowed.
An excerpt from C++98 standards section 3.6.1 [basic.start.main]
"[Note: it is recommended that any further (optional) parameters be added after argv. ]"
It is upto you to discover what the third para means on your favorite platform.
Comments
will return! I peep the web for blogs just like this
one.
golden slot mobile