首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“argc+ argc”的意思是什么?

“argc+ argc”的意思是什么?
EN

Stack Overflow用户
提问于 2022-05-21 15:31:26
回答 3查看 698关注 0票数 8

我正在编写一个程序,它接受命令行参数,并使用自定义比较器以字母数字排序顺序打印出来。

在此过程中,我不得不在std::set容器中插入命令行参数。在线查看了一些类似的代码,发现如下内容:

代码语言:javascript
复制
std::set<char*, decltype(customComparator)> args (argv, argv+argc, customComparator)

argv + argc 参数是什么意思?

在尝试插入cmd参数时,如下所示:

代码语言:javascript
复制
std::set<char*, decltype(customComparator)> args (argv, customComparator)

argv参数上有一条红色的曲线。

EN

回答 3

Stack Overflow用户

发布于 2022-05-21 15:57:50

"argv + argc“的意思是什么?

argv + argc是一个指针,指向最后一个命令行参数的末尾(或者指向下图所示的null )。下文对此作了解释(包括图形形式和文本形式)。

图显示为argc = 5

解释

让我们考虑一下宣言:

代码语言:javascript
复制
int main (int argc, char *argv[])

在上述声明中,名为argv的第二个参数的类型实际上是一个char**。也就是说,argv是指向指向char的指针的指针。这是因为char* [] 由于类型的衰变而使衰变为。

换句话说,argv是一个指针,指向数组的第一个元素,其元素类型为char*。此外,数组的每个元素argv[i] (具有char*类型的元素)本身指向一个字符,该字符是以空结尾的字符串的开始。也就是说,每个元素argv[i]指向数组的第一个元素,其元素类型为char

票数 11
EN

Stack Overflow用户

发布于 2022-05-21 15:45:58

您展示的代码使用基于迭代器的构造函数,该构造函数接收begin迭代器和过去的end迭代器。

问题是,STL也认为指针是迭代器。++ptr运算符以及ptr != end_ptr*ptr都能工作。

因此,如果您想要从一个C风格的对象集合构建一个STL容器,那么很有可能这样做。argv是所有args值的开始,argv[argc - 1]是结束。要在结束时得到一个指针,只需执行argv + argc

票数 6
EN

Stack Overflow用户

发布于 2022-05-21 15:48:22

  1. 这个std::set构造函数的重载接受两个迭代器和一个比较器。这两个迭代器应该定义一个半开放范围。第二个迭代器指向范围的末尾,对于许多类型的范围,它是最后一个元素。
  2. A指针是迭代器。如果argv指向数组的第一个元素,而argc是整数,则argv + argc指向同一个数组的argc第四个元素(从零开始)。

H 112,因为argc数组中有意义的元素,D15指向数组的最后一个有意义的元素。(碰巧还有另一个元素,它是一个空指针,我们对它不感兴趣)。

总之,range [argv, argv + argc)正是许多地方所期望的半开放范围标准库。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72330953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档