我是 C 的新手,当我看到像 **char(Pointer to a pointer?) 这样的东西时,我确实知道指针的概念,这让我感到困惑。所以我在看一个函数,它的定义如下所示:
void Settings_ParseCommandLine( int argc, char **argv, thread_Settings *mSettings )
无论如何,我现在想要的是 *argv 持有的价值是什么。我想在上面做 Printf。我怎样才能做到这一点?
argv
是一个字符串数组。 *argv
等价于argv[0]
,也称为 中的第一个字符串argv
。您可以完全按照您的建议打印它:
printf("%s\n", *argv);
如果您想将它们全部打印出来(这可能更有用):
for (int i = 0; i < argc; i++)
printf("%s\n", argv[i]);
printf("%s\n", argv[0]);
或者
printf("%s\n", *argv);
请务必检查argc
中的条目数argv
。
如果声明了某些内容char
,则意味着它(通常)是 8 位字符值。
如果声明了某些东西,char*
则意味着它是指向 a 的指针char
。
如果声明了某些东西,char**
则意味着它是指向 a 的指针的指针char
。
当您将*
运算符应用于表达式中的指针时,您“取消引用”并导致返回指针指向的值。如果您*
不止一次地应用它,那么您应用它的东西大概是指向指针的指针。
在上述情况下,char **argv
是argv
参数的声明,将其定义为指向的指针char
。
还有两件重要的事情需要理解。首先,sometype*
指针可能(也可能不是)是指向数组的指针sometype
,而不是单个sometype
值。(除了检查指针的设置方式之外,没有办法知道是否是这种情况。)
其次,值数组char
是“字符串”在 C 中表示的常用方式,因此char*
通常对字符串进行寻址。
那么,通过归纳,char**
可能是一个指向字符串指针数组的指针。
在 C 中,我们通常认为 achar *
是一个字符串,对吧?因此,可以将其char **
视为指向字符串的指针或指向 char 指针的指针。这意味着argv
包含多个字符串(每个字符串都应该以 null 结尾)。 argc
告诉您包含多少个字符串argv
。
要打印它,请尝试以下操作:
for (i = 0; i < argc; ++i)
printf("%s ", argv[i])
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
在使用它们之前检查你是否有足够的参数:)