呐,这次我又来装逼了。我保证,这是这学期最后一次。
如果从我在百度C++吧的第一次发言(2009年7月2日)到今天,日子已经过去了2380天,然而我之前还没有考过一次C语言。好慌……好了好了,打住,不然待会儿真被当成装逼了。不过我说我初学的时候用while包住过main你信?至少你没有这样干过吧。
那么,我尽力,把自己带入2380个日子前,努力以一个初学者的视角来想一下C语言到底包含着什么知识点。我承认这种方法充满了应试色彩,而且对于上机写代码这种形式的考试可能并没有十分显著的作用。不过我是真的希望每个看到这篇文章的读者,即使以后不靠C语言吃饭,写不出优秀的C代码,也至少能对C语言有一个正确的理解。那我即使是背上装逼的骂名,也心满意足了。(其实我会告诉你我是因为不想复习物理了吗)
关于新手指引之类的内容,我都写在了那个「C指引」的文档里,点击打开它的GitHub页面。外加精力有限,因此不想再重复那些内容。所以我会列一些问题,并且不会给出答案。希望能迫使你思考。这些问题可能会带有我自己的主观色彩,不喜欢就点关闭咯。
先从初级开始。
- C语言代码文件的后缀名是什么?这类文件可以用哪些工具打开和浏览?
- 什么是可执行文件?它需要另外的软件打开它吗?
- C语言文件从源代码到可执行文件的过程叫做什么?这个过程中发生过什么?
- 如果我要输出Hello, world!,我需要在程序的第一行写上什么?如果不写有什么后果?
- 为什么程序执行时候的窗口会一闪而过?那个黑色的窗口究竟是什么?
- main是什么?我把代码写在main外面会有什么后果?
- main前面应该是void还是int?
- 变量的存在有什么意义?C语言里的变量有哪些类型?
- 我怎么去获取来自用户在命令行的输入?接受输入的函数跟输出的函数在调用方式上有什么区别?
- 既然一个字符串在代码里不能跨很多行书写,那么我怎么在字符串里表示换行?制表符呢?
- while语句和do…while语句的区别在哪里?
- switch…case语句里的break有什么作用?它和if语句比有什么局限性?
- 对于if语句括号里的内容来说,一个等号和两个等号有什么差别?两个等号中间能有空格吗?
- 如果变量a是double类型,那a=5/2之后a的值应该是多少?
什么,觉得太简单了是吧?那来中级的问题:
- 如下的代码会按何种方式执行?会输出什么结果?
int sample = 1, ok = 0;
if (sample == 1)
if (ok)
puts("Ok.\n");
else
puts("No.\n");
- goto语句是如何使用的?为什么我们提倡不使用goto语句?
- 什么时候程序需要函数声明?函数声明应该放在哪里?
- 到底什么是EOF?EOF可以用在我们输入的什么地方?
- i++和++i有什么不同?i+++++i这种表达式有意义吗?
- 应该如何安全地读取一个文件里的内容?写文件呢?
- 说出数组和指针的区别(至少三个)
- 字符类型有数值吗?strcmp的返回值有什么含义?
- static和extern关键字有什么用?
啊哈,还是不满足吗?我们来看看高级篇:
- 为什么在main函数里定义一个非常大的数组,程序可能会崩掉,而我放到外面就不会了?
- char *const和const char*的区别在哪里?对于声明const char *s=”abcd”,这个指针s到底「指向」什么地方?
- 如果我像这样定义:
typedef char* sptr;
const sptr b;
这里的b到底是什么类型?是const char*吗?
- 考虑这样一个结构体:
struct sample {
int a;
char b;
};
那sizeof(struct sample)
的值会是多少?为什么?
发表回复