24 / 07 / 09

「一生一芯」Learn C the hard way - Ex 5

练习 5:一个C程序的结构

#include <stdio.h> /* This is a comment. */ int main(int argc, char *argv[]) { int distance = 100; // this is also a comment printf("You are %d miles away.\n", distance); return 0; }

附加题 1

对于每一行,写出你不理解的符号,并且看看是否能猜出它们的意思。在纸上写下你的猜测,你可以在以后检查它,看看是否正确。

int argc, char *argv[]

在 C 和 C++ 编程中,int argc, char *argv[] 是标准的命令行参数,它们作为 main 函数的参数传递,用于获取从命令行传递给程序的参数。下面是它们的具体作用:

argc

  • 类型int

  • 含义:参数个数,表示命令行传递给程序的参数的数量。

  • 详情argc(argument count)包含传递给程序的参数总数,包括程序名本身。例如,如果命令行输入为 ./program arg1 arg2 arg3,则 argc 为 4。

argv

  • 类型char *argv[]char **argv

  • 含义:参数值,指向包含命令行参数的字符串数组。

  • 详情argv(argument vector)是一个指向字符指针的数组,每个元素指向一个命令行参数的字符串。argv[0] 通常是程序的名称,argv[1]argv[argc-1] 是命令行传递的其他参数。例如,如果命令行输入为 ./program arg1 arg2 arg3,则:

    • argv[0]"./program"

    • argv[1]"arg1"

    • argv[2]"arg2"

    • argv[3]"arg3"

示例

以下是一个示例程序,演示如何使用 argcargv 打印传递给程序的命令行参数:

#include <stdio.h> int main(int argc, char *argv[]) { printf("Number of arguments: %d\n", argc); for (int i = 0; i < argc; i++) { printf("Argument %d: %s\n", i, argv[i]); } return 0; }

运行此程序,如果命令行输入为 ./program arg1 arg2 arg3,输出将是:

Number of arguments: 4 Argument 0: ./program Argument 1: arg1 Argument 2: arg2 Argument 3: arg3

应用场景

  • 参数解析:通过 argcargv 解析命令行参数,根据输入的参数执行不同的操作。

  • 动态输入:允许程序接受动态输入,使得程序更灵活和通用。

  • 脚本化:在脚本和批处理操作中,使用命令行参数传递输入数据或配置选项。

附加题 2

回头去看之前几个练习的源代码,并且像这样分解代码,来看看你是否了解它们。写下你不了解和不能自己解释的东西。

谢天谢地前四个不算太难。