什么是char * argv []以及它与char ** argv的相似之处

时间:2015-08-02 17:03:42

标签: c pointers command-line-arguments

我无法理解char * argv []与char ** argv的相似之处。 另请告诉我何时使用指针?

2 个答案:

答案 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[])