c - C 中命令行参数 `argv` 的类型是什么?

标签 c arrays pointers language-lawyer argv

我正在阅读 C Primer Plus 中关于命令行参数 argv 的部分,但我很难理解这句话。

它说,

The program stores the command line strings in memory and stores the address of each string in an array of pointers. The address of this array is stored in the second argument. By convention, this pointer to pointers is called argv, for argument values .

这是否意味着命令行字符串作为指向 char 数组的指针数组存储在内存中?

最佳答案

argvchar ** 类型。 它不是数组。它是指向 char 的指针。命令行参数存储在内存中,每个内存位置的地址存储在一个数组中。该数组是指向 char 的指针数组。 argv 指向这个数组的第一个元素。

                  Some
                  array

                 +-------+        +------+------+-------------+------+
argv ----------> |       |        |      |      |             |      |
                 | 0x100 +------> |      |      | . . . . . . |      |  Program Name1
         0x900   |       |        |      |      |             |      |
                 |       |        +------+------+-------------+------+
                 +-------+         0x100  0x101
                 |       |        +------+------+-------------+------+
                 | 0x205 |        |      |      |             |      |
         0x904   |       +------> |      |      | . . . . . . |      |  Arg1
                 |       |  .     |      |      |             |      |
                 +-------+        +------+------+-------------+------+
                 |  .    |  .      0x205  0x206
                 |  .    |
                 |  .    |  .
                 |  .    |
                 +-------+  .     +------+------+-------------+------+
                 |       |        |      |      |             |      |
                 | 0x501 +------> |      |      | . . . . . . |      |  Argargc-1
                 |       |        |      |      |             |      |
                 +-------+        +------+------+-------------+------+
                 |       |         0x501  0x502
                 | NULL  |
                 |       |
                 +-------+


0xXXX Represents memory address


<子>1。在大多数情况下,argv[0] 表示程序名称,但如果程序名称在主机环境中不可用,则 argv[0][0] 表示空字符。

关于c - C 中命令行参数 `argv` 的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39095850/

相关文章:

生成和发送数据包的 C 代码

c - 如何在C中读取具有相同前缀的多个文件?

javascript - 如何使用 jQuery 删除所有重复项?

pointers - Go中的指针与值接收器| heap.Interface vs sort.Interface

c - 用 C 将结构写入文件

c - 从 C 文件中读取数字

c - 大数组的全局声明如何在 C 中工作?

c - 仅获取 C 中数组的所有其他值

c++ - 为什么我用这个背包问题求解器得到 "unknown signal 11"?

我可以返回指向 VLA 的指针吗?