main函数参数的有关问题

main函数参数的问题
初学C++,看到main函数可以有参数,有一些理解上的疑惑:
1.cmd中输入实参传递给主函数时,比如传递了apple,banana,coconut这三个:(程序名假设已传递)
main函数的形参写成char *argv[]我还能理解,大概就类似于
char *argv[]={"apple","banana","coconut"};好歹这个也是合乎c++语法的
而main函数的形参如果写成char **argv,我就没法理解了,难道有
char **argv={"apple","banana","coconut"};这个语法不通啊
是不是不该像我这么理解?还请高手指教

还有一个相关的问题索性一起问掉:
2.main函数的另一个参数int argc,是不是不用给它传递实参?做的书上的一个很简单例子
    using namespace std;
int main(int argc,char **argv)
{
cout<<"The arguments you have entered are:"<<endl;
    for(size_t i=0;i!=argc;++i)
cout<<argv[i]<<endl;
return 0;
}

在cmd中只传递了几个给argv的实参,没有给argc一个数字,难道argc会自动记录argv接受的实参个数?

c++ 求助

------解决方案--------------------
楼主搜索“谁调用了main”就明白了。
------解决方案--------------------
char **argv可以分配成指针的数组
------解决方案--------------------
C 和C++不是把形参中的数组参数默认为指针吗?这样就一样了
------解决方案--------------------
int argc 参数个数
char** argv 参数数组,,数组大小就是前面那个参数,通过数组下标访问里面存放的内容,例如argv[0],argv[1]
------解决方案--------------------
你理解的只是表面的,分析的很不对,形参为数组都会退化指针,只是首地址。这个自己再多练习吧,你先从一级指针开始。argc会自动记录参数个数的,argv【0】就是当前可执行文件,argv【1-n】就是穿的参数
------解决方案--------------------
1,在函数原型中, char*[] 和 char**是一样一样的。
2, OS/CRT在创建进程的时候会填充main的实参。