int main(int carg,const char ** varg){

时间:2016-11-26 15:40:20

标签: c arrays pointers parameter-passing

我有以下功能:

 int func(int carg, const char **varg) { 
  //code ...
 }

我的理解如下:

varg是指向第二个指针的指针。第二个指针指向一个char。这个字符是......

either: a single char (1st case)
or: a char that constitutes the first char of a char array. (2nd case)

这种理解是否正确?

我不明白的是为什么你想把指针作为参数传递给指针。

如果你想(通过引用)将一个字符传递给函数,你可以简单地写:

int func(int carg, const char *v) { 
      //code ...
}

在第二种情况下,您希望将char数组传递给函数(通过引用),可以使用相同的函数(此时,v指向传递给函数的数组的第一个元素):

int func(int carg, const char *v) { 
  //code ...
 }

总之,我不明白你为什么要使用指针指针作为函数的参数。

我具体的案例是以下主要功能的声明:

 int main(int carg, const char **varg);

** varg处理命令行上的参数。 可以使用varg [1],varg [2]等访问命令行参数。 显然,** varg的作用就是将命令行参数保存在数组中。但是这可以通过以下代码以更简单的方式实现:

 int main(int carg, const char *varg); 

我错过了什么?

1 个答案:

答案 0 :(得分:1)

要存储字符串,您需要在内存中使用一组字符。指向C中任何数组的指针是[type of array elements] *,它实际上是指向此数组中第一个元素的指针。如果是字符串,则为char *

命令行的参数是 strings 的数组。这意味着,你有一个数组,其中每个元素都是内存中的单元格,包含指向另一个数组的指针 - char数组。在这种情况下,指向数组的指针数组中的元素的类型char *,这给了我们适当类型的指向这个数组的指针(只需替换{{1上面的公式):char *