目录
前文列表
《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 函数》
《C 语言编程 — 高级数据类型 — 指针》
《C 语言编程 — 高级数据类型 — 数组》
《C 语言编程 — 高级数据类型 — 字符串》
《C 语言编程 — 高级数据类型 — 枚举》
《C 语言编程 — 高级数据类型 — 结构体与位域》
《C 语言编程 — 高级数据类型 — 共用体》
《C 语言编程 — 高级数据类型 — void 类型》
《C 语言编程 — 数据类型的别名》
《C 语言编程 — 数据类型转换》
《C 语言编程 — 宏定义与预处理器指令》
《C 语言编程 — 异常处理》
《C 语言编程 — 头文件》
《C 语言编程 — 输入/输出与文件操作》
《C 语言编程 — 堆栈与内存管理》
命令行参数
C 语言支持在执行程序时,从命令行传入参数值给程序,这些值被称为命令行参数。当希望从外部控制程序,而不是在代码内对这些值进行硬编码时,非常常见的一种手段。命令行参数是使用 main() 函数参数来处理的:
int argc
:标识传入的参数的个数。char *argv[]
:是一个字符串指针数组,指向传递给程序的每个参数。
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Program name %s
", argv[0]);
if (argc == 2) {
printf("The argument supplied is %s
", argv[1]);
}
else if (argc > 2) {
printf("Too many arguments supplied.
");
}
else {
printf("One argument expected.
");
}
}
运行:
$ ./main fanguiju
Program name ./main
The argument supplied is fanguiju
其中,argv[0]
存储的是程序的名称,argv[1]
才是指向第一个命令行参数的指针,*argv[n]
则是最后一个参数。如果没有提供任何参数,argc
将为 1,否则,如果传递了一个参数,argc
将被设置为 2。
多个命令行参数之间用空格分隔,但是如果参数本身带有空格,那么传递参数的时候应把参数放置在双引号 “” 或单引号 ‘’ 内部。
需要注意的是,也可以使用 char **argv
代替 char *argv[]
形参,以下几个概念竟然让人混淆:
int aArray[5] = {1, 2, 3, 4, 5}; // 数组变量。
char greeting[] = "Hello"; // 字符串变量,本质是一个以 null 字符结尾的字符数组。
char *ch; // 字符指针变量,指向字符的指针。
char *stuname_temp[STUDENT_NUM]; // 指针数组变量,每个元素都指向字符(或字符串)的指针的数组。
char **ch; // 指针指针变量,指向字符指针的指针。
当 STUDENT_NUM 为 1 或不填写时,char *stuname_temp[STUDENT_NUM]
和 char **ch
的变量名本质是一致的。我们在数组章节提到过,数组变量名就是指向数组第一个元素的指针,如果这个元素的值是一个指针,那么数组变量名的本质就是一个指针指针。
#include <stdio.h>
int main() {
char **a;
char *b[] = {0};
printf("a: %lu
", sizeof(a));
printf("b: %lu
", sizeof(b));
return 0;
}
运行:
$ ./main
a: 8
b: 8