1

我是 C 的新手,当我看到像 **char(Pointer to a pointer?) 这样的东西时,我确实知道指针的概念,这让我感到困惑。所以我在看一个函数,它的定义如下所示:

void Settings_ParseCommandLine( int argc, char **argv, thread_Settings *mSettings )

无论如何,我现在想要的是 *argv 持有的价值是什么。我想在上面做 Printf。我怎样才能做到这一点?

4

5 回答 5

6

argv是一个字符串数组。 *argv等价于argv[0],也称为 中的第一个字符串argv。您可以完全按照您的建议打印它:

printf("%s\n", *argv);

如果您想将它们全部打印出来(这可能更有用):

for (int i = 0; i < argc; i++)
    printf("%s\n", argv[i]);
于 2013-09-23T22:28:40.377 回答
4
printf("%s\n", argv[0]);

或者

printf("%s\n", *argv);

请务必检查argc中的条目数argv

于 2013-09-23T22:28:43.953 回答
3

如果声明了某些内容char,则意味着它(通常)是 8 位字符值。

如果声明了某些东西,char*则意味着它是指向 a 的指针char

如果声明了某些东西,char**则意味着它是指向 a 的指针的指针char

当您将*运算符应用于表达式中的指针时,您“取消引用”并导致返回指针指向的值。如果您*不止一次地应用它,那么您应用它的东西大概是指向指针的指针。

在上述情况下,char **argvargv参数的声明,将其定义为指向的指针char

还有两件重要的事情需要理解。首先,sometype*指针可能(也可能不是)是指向数组的指针sometype,而不是单个sometype值。(除了检查指针的设置方式之外,没有办法知道是否是这种情况。)

其次,值数组char是“字符串”在 C 中表示的常用方式,因此char*通常对字符串进行寻址。

那么,通过归纳,char** 可能是一个指向字符串指针数组的指针。

于 2013-09-23T22:32:10.263 回答
2

在 C 中,我们通常认为 achar *是一个字符串,对吧?因此,可以将其char **视为指向字符串的指针或指向 char 指针的指针。这意味着argv包含多个字符串(每个字符串都应该以 null 结尾)。 argc告诉您包含多少个字符串argv

要打印它,请尝试以下操作:

for (i = 0; i < argc; ++i)
  printf("%s ", argv[i])
于 2013-09-23T22:29:59.650 回答
0

char** argv可以认为是指向指针的指针,但也可以认为是数组的数组。由于字符串是 C 中的字符数组,因此char**指向字符串数组。

如果你想访问参数,你可以这样做:

// argv[0] is the executable name
char* first_arg = argv[1]; // argv[1] is the first argument and so on...
printf("first arg: %s\n", first_arg);

确保argc在使用它们之前检查你是否有足够的参数:)

于 2013-09-23T22:29:00.000 回答