指向控制台参数的指针
Pointer to console arguments
作为一个C新手,我有以下理解困难:
int main(int argc, char *argv[]) {
char **inputs = argv + 1;
char **inputs 是指向 char *argv[] 的指针,它也是一个指针,对吧?但为什么我必须在末尾添加“+1”?这会是 '\0' 字符的额外 space 吗?
argv[0],或第一个参数,是保存程序名称的字符串。
这只是为了忽略包含调用程序的路径名的第一个条目。总是至少有一个参数传递给 main,就是这个。尝试自己传递一些参数并打印它们..你会得到一个更好的主意:)
argv[0] 是您当前正在使用的程序 运行
argv[1+] 是传递给程序的参数
也许不是最好的参考:https://www.gnu.org/software/gawk/manual/html_node/ARGC-and-ARGV.html
为了解释这个上下文中的“+1”,我们正在做指针运算。这就是说您想要 argv
指向的任何内容之后的下一个内存地址。由于 argv
指向字符串数组中的第一个地址(C 中的 char*
),因此下一个内存地址保证是序列中的第二个元素(数组在内存中连续布局) .因此,argv + 1
等同于 &argv[1]
。
如前所述,argv
中的第一个元素只是程序名称。所以你想要程序输入之后的一切
作为一个C新手,我有以下理解困难:
int main(int argc, char *argv[]) {
char **inputs = argv + 1;
char **inputs 是指向 char *argv[] 的指针,它也是一个指针,对吧?但为什么我必须在末尾添加“+1”?这会是 '\0' 字符的额外 space 吗?
argv[0],或第一个参数,是保存程序名称的字符串。
这只是为了忽略包含调用程序的路径名的第一个条目。总是至少有一个参数传递给 main,就是这个。尝试自己传递一些参数并打印它们..你会得到一个更好的主意:)
argv[0] 是您当前正在使用的程序 运行
argv[1+] 是传递给程序的参数
也许不是最好的参考:https://www.gnu.org/software/gawk/manual/html_node/ARGC-and-ARGV.html
为了解释这个上下文中的“+1”,我们正在做指针运算。这就是说您想要 argv
指向的任何内容之后的下一个内存地址。由于 argv
指向字符串数组中的第一个地址(C 中的 char*
),因此下一个内存地址保证是序列中的第二个元素(数组在内存中连续布局) .因此,argv + 1
等同于 &argv[1]
。
如前所述,argv
中的第一个元素只是程序名称。所以你想要程序输入之后的一切