第 6 课:命令行参数、多文件与指针入门
非 UNSW 官方材料。本文基于官方 Week 05 的 command line arguments、multi-file projects、pointers 和 memory lecture 做中文转述;代码模板为本站原创。[S015][S016]
今天只做:分清
argc、argv、&、*四个符号。 下一步:主控台 · 上一课 · 下一课:malloc/free 与 linked list 起步 别乱跳:指针先翻译成“地址”,不要马上想很深。
本课目标
第 6 课不追求“懂完内存”,只要先会读 3 个符号:argc 是数量,argv 是文字列表,& 是地址。[S015][S016]
| 看见 | 先翻译成 |
|---|---|
argc | 参数个数 |
argv[1] | 第一个额外参数 |
&x | x 的地址 |
*p | 地址 p 指向的值 |
command line arguments
Lecture 9 进入 command line arguments;保命做法是先检查 argc,再读 argv,不要假设用户一定给了参数。[S015]
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: ./program word\n");
return 1;
}
printf("first word: %s\n", argv[1]);
return 0;
}
指针先别怕
Lecture 10 把 pointers、memory 和 dynamic memory 放在一起;第一天只要记住“指针变量存的是地址”。[S016]
CodeBlock Loading...
5 分钟练习
- 写一个程序,没有参数时打印 usage。
- 画出
value -> address -> pointer。 - 解释
&value和*pointer的区别。
本课过关标准
- 我会先检查
argc。 - 我知道
argv[0]通常是程序名。 - 我知道指针保存地址。
- 我不会在没检查的情况下直接读
argv[1]。
引用
- [S006] COMP1511 C reference sheet PDF: https://cgi.cse.unsw.edu.au/~cs1511/26T1/resources/c-reference-sheet.pdf
- [S015] Lecture 9 PDF: https://cgi.cse.unsw.edu.au/~cs1511/26T1/slides/week_5/COMP1511_26T1_Lecture09.pdf
- [S016] Lecture 10 PDF: https://cgi.cse.unsw.edu.au/~cs1511/26T1/slides/week_5/COMP1511_26T1_Lecture10.pdf