目录
目录
学习路线:
参考编程指北公众号,如有侵权,联系删除
1.第一阶段,少看书,多看视频
- 计算机导论 CS50
- 中国MOOC网翁恺的视频,C语言入门和进阶,讲的非常细致,适合初学者程序设计入门——C语言_浙江大学_中国大学MOOC(慕课)
- 学完语法,练手小例子,从最基本的链表插入、删除、单向、双向、环装链表到链表反转、合并、分割等,写点小东西,比如图书管理系统,俄罗斯方块,贪吃蛇之类(涉及函数,文件操作,动态内存,指针等关键内容)
2.搞懂内存,看书,写代码
-
深入学习指针
《C和指针》、《深入理解C指针》,真的是涉及指针方方面面的好书,墙裂推荐。
-
编译、链接
这俩兄弟懂了其实也不能帮你提高写代码的水平,主要是对于一些编译、链接过程的报错,更加的明确,不至于懵。
比如链接过程中常见的错误是符号未找到(undefined reference)和符号重定义(redefinition)
当你熟悉链接过程,符号查找过程之后,解决对应的报错也会得心应手。
-
汇编
C 语言之下就是汇编,会汇编,你就能直接把 C 语言衣服扒掉,看看背后的实现,比如大家都在讨论数组和指针有什么区别?
你去写个程序,然后 gcc -S 一下,看下汇编代码,你就会发现没啥区别。。。
汇编不需要会写,会看懂部分记得,大可不必去刻意的记住各种指令、寻址方式。
推荐
C语言入门篇视频
第一课 程序设计与C语言
1.在线编程开发环境网站:C 语言开发环境 (icourse163.org) https://clin.icourse163.org
2.开发软件 Dev-C++,下载链接Download Dev-C++ from SourceForge.net
第二课 计算
++i和i++
#include <stdio.h>
int main()
{
int a=14;
int t1=a++;
printf("t1:%d,a:%d\n",t1,a);
int t2=++a;
printf("t2:%d,a:%d\n",t2,a);
}
打印结果:t1:14,a:15
t2:16,a:16
第五课 循环控制
多重循环时,break只能跳出当前循环,如果跳出多重循环,使用goto
第六课 数组与函数
- 每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
- 按传值方式传递参数时,系统为对应的形参分配相应的内存单元,并将实参的值传递给形参后,实参与形参就断开了联系,即使在函数体内改变了形参的值,也不会影响到实参。数据传递方向是从实参到形参单向传递。
C语言不允许函数嵌套定义
二维数组
第七课 数组运算
1.数组的大小
2.数组的赋值
数组变量本身不能被赋值,要把一个数组的所有元素交给另一个数组,必须采用遍历
注意:写程序最好单一出口,即return 只在结尾,多个return不好维护
第8课 指针与字符串
1.指针
- &运算符取得变量的地址,他的操作数必须是变量
- 地址的大小是否与int相同取决于编译器(32位或64位)
printf("%lu\n",sizeof(int)); 4/4
printf("%lu\n",sizeof(&i)) 8/4
- 输出地址用%p printf("%p\n",&i);
- 指针变量就是记录地址的变量
- *是一个单目运算符,可以访问指针的值所表示的地址上的变量
- 数组变量是特殊的指针
void f(int *p) 不是定义了一个叫做*p的形参,而是定义了一个形参,类型是int *
{
}
2.字符类型
制表符可用于字符串对齐,一个\t为4个字母
3.字符串
C语言进阶篇视频
第1课 指针与字符串
1.指针应用场景
- 交换两个变量的值
- 函数返回多个值,某些值就只能通过指针返回。传入的参数实际是需要保存带回的结果的变量
- 函数返回运算的状态,结果通过指针返回。常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错(返回0或-1)
2.指针最常见错误
- 定义了指针变量,还没有指向任何变量,就开始使用指针
3.指针与数组
参数a[],实际是个指针,写明数组大小没用
数组变量本身表达地址
4.指针与const
const在*前,表示所指不能修改,在后面表示指针不能被修改
5.动态内存分配
6.字符串操作
第2课结构类型
1.枚举
2.结构
3.联合
第3课 链表
第4课 程序结构
1.静态本地变量
本地变量地址会被收回
2.变量的定义和声明
第5课 文件
*表示跳过
1.文件输入输出
2.二进制文件
3.位运算
符号位不变
可以对多个位进行位操作,而不是一个位