C语言提高
提高部分需要对基础知识掌握后再去学习,学习的判断标准可以自我检测(基础知识需要铭记于心),也可以通过基本算法进行判读(基本排序:冒泡和选择法排序的思想及代码需要非常熟练)才可以学习这一部分。
内存管理(内存四区)
标准
需要自己熟练掌握冒泡和选择排序的思想及代码、会封装函数及函数参数中的数组退化问题。
void fun(int a[]);// 4字节
int a[] = {1, 2, 3}; // 12个字节
数据类型
需要掌握类型的本质和作用,自定义类型和sizeof关键字,void类型的使用。
a)如果函数没有返回值,必须用void修饰: void fun(int a);
b)如果函数没有参数,参数可以用void修饰: int fun(void);
c)不能定义void类型的普通变量, void a; //error,不能确定分配多大空间
d)void p; //ok, 万能指针, 指针类型都是 4 个指针,函数参数,函数返回值
int b[10];
//b, &b的数组类型不一样
//b, 数组首元素地址, 一个元素4字节,+1, +4
//&b, 整个数组的首地址,一个数组410 = 40字节,+1, +40
变量
需要掌握变量的本质、定义和赋值。
4)变量的赋值:1)直接 2)通过指针间接
4)重点:没有变量,哪来内存,没有内存,哪里内存首地址
5)变量三要素(名称、大小、作用域),变量的生命周期
内存四区(栈区、堆区、全局区、代码区)
1)栈区:系统分配空间,系统自动回收,函数内部定义的变量,函数参数,函数结束,其内部变量生命周期结束
2)堆区:程序员动态分配空间,由程序员手动释放,没有手动释放,分配的空间一直可用
3)全局区(全局变量和静态变量,里面又分为初始化区和未初始化区,文字常量区:字符常量):整个程序运行完毕,系统自动回收
4)内存四区模型图(C语言学好指针的关键)
5)a) 栈区地址生长方向:地址由上往下递减
b) 堆区地址生成方向:地址由下往上递增
c) 数组buf, buf+1 地址永远递增
函数调用模型
1)程序各个函数运行流程(压栈弹栈,入栈出栈,先进后出)
首先我要告诉大家的是:第一,学习无捷径!对于学习编程而言,你现在的付出将来都是有回报的。但是,学习C语言也需要方法。
我遇到过很多学习C语言的人,包括我以前的同学,很多人都是学到一半就放弃了。那么为什么那么多人学习C语言都半途而废呢?原因就是他们找不到正确的学习方法!在学习的过程中四处碰壁,兴趣和自信心逐渐被消耗殆尽。对他们来说学习C语言是一件很痛苦的事!
事实上学习编程是一件很好玩、很有趣、很有意思也很有前途的事情!那么学习C语言有什么好的方法呢?根据我自己多年的总结,以及很多编程前辈的经验,主要有以下几个方面:
1) 分清主次
学习C语言最忌讳的就是不分主次,这是绝大多数学习C语言的同学都会犯的错误!我们刚开始学习的时候只需要将那些最重要的、最核心的学会就已经很好了!先将最精髓的东西提炼出来,再将整个C语言学一遍,从全局上把握C语言。对于那些次要的,有需要再学,没有需要也可以不学。
2) 一定要多上机,多“敲”代码
编程是一门实践性的学科,绝对不是理论。如果不动手“敲”代码的话,永远都学不会编程。很多问题只有在“敲代码”的时候才能发现,才会有更加深刻的体会、领悟和理解。而不是靠死记硬背书中的注意点,那样真的很痛苦。我在学习编程的时候从来都不会刻意记忆什么注意点,这些知识点都是在不停“敲代码”的过程中,自然而然地融入我的身体中的。
你们一定要记住一句话:“程序是写出来的,不是看书看出来的!”
3) 要“敲代码”,必学盲打
盲打是学习编程最基本的技能。就算你C语言学得很好,达到了“思想在键盘上飞舞”的境界,但是如果你不会盲打,那你想“飞”也“飞”不起来!所以,不会盲打会非常影响你的学习效率。
编程需要不断地积累。我们一定要学会模仿别人优秀的代码、优秀的算法,然后将它记下来。一定要站在巨人的肩膀上学习。但是我们的记忆能力是有限的,时间长了难免会遗忘,所以一定要学会记笔记。一有心得、体会、感悟就写下来,这些都是很珍贵的。
我们在记笔记的时候,如果眼前没有计算机则可以先写在纸上,但事后一定要将它整理成电子版。整理成电子版看起来会很方便、舒适,还可以随意地增添和删改,保存时间也长。