我无法理解char * argv []与char ** argv的相似之处。 另请告诉我何时使用指针?
答案 0 :(得分:8)
声明为具有数组类型的函数参数被静默调整为具有指针类型。因此,如果声明一个类型为int x[]
的参数的函数,则该参数实际上具有类型int *x
。类似地,函数参数中的char *argv[]
与char **argv
相同,因为指针数组被调整为指向指针的指针。
答案 1 :(得分:0)
基本上char * argv[]
是char指针数组,char ** argv
是指向char指针的指针。
当我们传递它时,函数参数 char * argv[]
被调整为指向该数组的初始元素的指针类型,char ** argv
和都是相同的事
6.7.5.3函数声明符(包括原型) ...
7参数声明为''类型数组''应调整为''限定指向类型'',其中类型限定符(如果有)是在数组类型的[和]中指定的那些推导。如果关键字static也出现在数组类型派生的[和]中,则对于每次对函数的调用,相应实际参数的值应提供对数组的第一个元素的访问,其中至少有指定的元素数量。按大小表达式。
如您所见,我们使用main
的两个定义都是等效的 -
int main(int argc, char ** argv)
和
int main(int argc, char *argv[])