我有以下功能:
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);
我错过了什么?
答案 0 :(得分:1)
要存储字符串,您需要在内存中使用一组字符。指向C中任何数组的指针是[type of array elements] *
,它实际上是指向此数组中第一个元素的指针。如果是字符串,则为char *
。
命令行的参数是 strings 的数组。这意味着,你有一个数组,其中每个元素都是内存中的单元格,包含指向另一个数组的指针 - char数组。在这种情况下,指向数组的指针数组中的元素的类型是char *
,这给了我们适当类型的指向这个数组的指针(只需替换{{1上面的公式):char *
。