哈佛《CS50计算机原理》公开课笔记
shaozhenghan
GitHub: https://github.com/shaozhenghan
展开
-
哈佛大学公开课:计算机科学cs50 学习笔记(第2集:数据表示与存储)
视频网址:http://open.163.com/special/opencourse/cs50.html1. 数据在计算机中的表示与存储日常生活中用的是10进制数,如:位 3 2 1 0 权重 10^3 10^2 10^1 10^0 数值 0 1 2 3 如上表所示数值123在十进制下是这样表示的,即...原创 2018-07-25 20:56:10 · 655 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第11集:RAM,内存管理,结构体,缓冲区溢出等)
1. 复习RAM/缓冲区溢出攻击法text 部分存储编译后的二进制文件,如源代码。initialized data 和 uninitialized data 分别存储初始化和未初始化的全局变量; heap 负责动态内存分配的内存(如 malloc()函数) 自上而下增长; stack负责存储函数调用,包括局部变量,函数形参,函数返回地址以便函数调用结束后还能回到原来调用它的函数继续运行,这...原创 2018-08-03 02:14:47 · 475 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第10集:指针,内存)
1. 复习RAM text 部分存储编译后的二进制文件,如源代码。initialized data 和 uninitialized data 分别存储初始化和未初始化的全局变量; heap 负责动态内存分配的内存(如 malloc()函数) 自上而下增长; stack负责存储函数调用,包括局部变量,参数,函数地址以便函数调用结束后还能回到原来调用它的函数继续运行,自下而上增长。 ...原创 2018-08-02 04:31:19 · 405 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第6集:C语言,RAM)
1. 关于变量对内存的使用#include <stdio.h>void swap(int, int);int main(void){ int x = 1; int y = 2; swap(x, y); printf("x=%i\n", x); printf("y=%i\n", y); return 0;}void swap(int a, int b)...原创 2018-07-28 02:33:21 · 1045 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码实现(第9集:归并排序)
用递归算法实现归并排序伪代码如下:if n < 2 return;else sort left half of elements; sort right half of elements; merge sorted halves; 例子:4,2,6,8,1,3,7,5 从小到大排序n < 2? nosort l...原创 2018-07-31 01:41:48 · 412 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第12集:单链表,内存分配)
1. 数组的优缺点数组元素是连续的存储在有限的内存里,这样有两个缺点:--数组的大小是有限的。如果需要给数组的内存(缓冲区buffer)扩容,需要调用realloc()函数。realloc()的工作原理:在内部调用malloc()来分配一块新的内存,然后用循环将原先内存的内容拷贝到新内存,然后free()掉原来的内存,返回新内存的地址。--不方便进行元素的插入与删除。因为元素连续存储,...原创 2018-08-04 03:57:57 · 892 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第4~5集:C语言,编译器)
1. fflush()函数此函数包含在stdio.h头文件中,用来强制将缓冲区中的内容写入文件。函数原型:int fflush(FILE *stream) ;函数功能:清除一个流,即清除文件缓冲区,当文件以写方式打开时,将缓冲区内容写入文件。也就是说,对于ANSI C规定的是缓冲文件系统,函数fflush用于将缓冲区的内容输出到文件中去。函数返回值:如果成功刷新,fflush返回0。指定...原创 2018-07-27 02:12:15 · 1104 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码练习(第8集:冒泡,选择排序,递归)
0. 前言 这门课讲的排序相当清楚,老师用很容易懂的方式讲原理,代码部分在linux下写,用gdb调试,这才是编程的学习方法。记得以前国内本科也学过,但根本没讲清楚。现在研究生又听这门公开课,发现把原理说清楚之后,代码自己很容易就实现了。另外gdb调试工具也很好用很重要,但国内学的时候老师甚至没有提过。1. gdb 调试工具的用法几个命令:run,break, continue, ...原创 2018-07-30 02:19:12 · 2500 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第3集:C语言,编译器)
1. 编译器 Compiler将代码文本按照ASCII码转换为二进制文件Linux 下用 gcc 或者 g++ 编译器gcc hello.c 默认在当前路径下生成 a.out 可执行文件,运行a.out:./a.out ./ 表示a.out 在当前路径下若要改变生成可执行文件的名字,则可以 gcc -o hello hello.c可以了解gcc 其他的命令参数...原创 2018-07-26 16:15:39 · 1042 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记(第7集:数组,其它)
1. 一个语法糖string s1 = (i==1)? "bottle" : "bottles";代替if -else2. 预处理宏定义例如:#define CONST_NAME 2;若程序多个地方用到2这个常量,用宏定义的好处是,当需要更改这个常量的值比如改为4,只需要在宏定义那里改一次就好了。3. 数组数组就是一整块连续的内存。如同python 中的numpy 数...原创 2018-07-29 02:58:21 · 267 阅读 · 0 评论 -
哈佛大学公开课:计算机科学cs50 学习笔记及代码练习(第14集:栈,队列,哈希表,树)
周末写代码--------------------------------2018.8.7---------------------------1. stack 栈stack 后进先出(LIFO)结构。下面用数组实现栈,用malloc使栈的容量可扩展。stack.c这里要特别注意:(1) Destroy()函数中,free(s->data); 以及 s->dat...原创 2018-08-08 03:07:30 · 958 阅读 · 0 评论