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