- 博客(18)
- 收藏
- 关注
原创 编程范式(斯坦福大学)学习笔记《十二》
本节课讲解的主要是预处理器,编译和连接的异同。#define有两个功能:一个是定义常量,一个是作为宏。//定义常量#define w 40#define h 80#define pere 2*(w+h)//宏#define MAX(a,b) (a>b?a:b)MAX(10,40)//预处理替换为(10>40?10:40)//int max = (fib(100...
2018-07-20 00:07:17 631
原创 编程范式(斯坦福大学)学习笔记《十一》
上次的课中都是使用C代码生成汇编代码,这次课中将使用C++代码生成汇编代码,对比结果发现这两种语言最终生成的代码形式很像。 C语言版本:void foo(){ int x; int y; x=11; y=17; swap(&x,&y);}对应的汇编代码:SP=SP-8;M[SP+4]=11;M[SP]=17;...
2018-07-19 16:43:25 1133
原创 编程范式(斯坦福大学)学习笔记《十》
int foo(int bar,int* baz){ char snink[4]; short* why; }栈段示意图:注意:1.局部变量参数根据声明从右至左而在栈中从高地址至低地址存放,即,第0个参数(bar)总是放在其他参数的下方,第1个参数在第0个参数之上。空间位域参数位于局部变量下方(也就是位于低地址处)。在空间位域参数和局部变量之间存储着调用函数的某些信息,以便...
2018-07-19 00:18:18 584
原创 编程范式(斯坦福大学)学习笔记《九》
接下来的课程会涉及到计算机体系结构和汇编语言,解释C/C++代码片段是如何编译成汇编代码的,内存模型,函数调用,函数返回的类型等。4字节变量的例子:int i;int j;i=10;j=i+7;j++;对应的汇编代码:M[R1+4]=10;//store operation(将栈段中某个区域的值进行了更新)R2=M[R1+4];//load operationR3=...
2018-07-17 18:24:21 591
原创 编程范式(斯坦福大学)学习笔记《八》
这节课主要讲解了内存管理函数实现方式。一.Heap(堆)堆位于低地址空间,通过malloc函数分配堆的地址。关于malloc函数的介绍可参考:C内存管理函数。int* arr=malloc(40*sizeof(int));注意:得到的内存块会比160字节大一点,可能是164或168,因为该内存块的开头包含了一段小的空间用来记录有用的信息(例如该块内存的大小,该内存块后面的内存块是...
2018-07-17 00:14:36 474
原创 编程范式(斯坦福大学)学习笔记《七》
在上一次课中分别实现了整型栈和泛型栈,需要注意的是以前我们在实现整型栈的时候栈空间元素存放的是入栈元素本身的值,而对于泛型栈,我们在泛型栈空间里存放的是指向元素的指针。 但是,如果我们的栈内元素本身就是指针或者句柄怎么办(他们本身也开辟了存储空间,我们需要释放这些空间)?在这里我们要修改stack结构体的定义,在里面添加一项用来指向函数的指针成员,这个函数具体让用...
2018-07-16 18:05:24 579
转载 编程范式(斯坦福大学)学习笔记《六》
这节课的内容是使用C来实现一个支持泛型栈。C语言实现支持泛型的栈一:首先我们先实现一个特定类型的栈(比如用来存储整型的栈),来看一下实现栈一般都需要哪些内容: 我们分三个文件来实现(stack.h;stack.c;Main.c)。stack.h //声明文件,里面包括对Stack以及相应操作(函数)的定义。// 定义一个整型栈typedef struct { // 指向栈...
2018-07-15 17:34:52 506
原创 编程范式(斯坦福大学)学习笔记《五》
线性搜索void *lsearch(void* key,void base,int n,int elemSize, int (*cmpfn)(void *,void *)){ for(int i<0;i<n;i++) { void* elemAddr=(char*)base+i*elemSize; //这里的强制转换成char*只是为了让编译器可...
2018-07-11 17:07:18 618 1
转载 编程范式(斯坦福大学)学习笔记《四》
斯坦福大学开放课程--编程范式(四)综述本节课的主要内容是关于泛型数据的拷贝,虽然是使用C语言实现,并且没有用到C++中的模板这种泛型编程技术,但是效果却非常好。本节内容紧接上节所将的字节位拷贝的知识,充分利用了字节拷贝技术。笔记由于内容和例子不断深入,实际核心内容则比较集中,因此这里只进行总结讨论。引例本节所有的例子都是针对于数据交换来进行的,从最简单的例子开始,不断深入。 开始是关于一个最简单...
2018-07-10 00:29:11 568
原创 编程范式(斯坦福大学)学习笔记《三》
本课继续讲解了C语言的强制类型转换,之后介绍了结构体,数组以及结构体中的数组。 *和&的技巧例1:double d = 3.1416;char ch = *(char*)&d;取出d的地址,并重新解释为char型,然后解引用。由于double为8bytes,而char为1bytes,因此ch表示的是原来double中截取1bytes的结果。 例2...
2018-07-09 21:16:29 866 3
转载 c/c++中索引超出数组边界问题
C/C++没有数组在其它高级语言里,不管是定义(声明)还是引用, a[i] 或 a[3] 都是一个整体。在 C/C++ 里,却是一个表达式: a[i] 是运算符 [] 连接两个实体 a 和 i 。说 C/C++ 并没有数组 , 有以下几条理由。 理由一: C 里没有数组形式。“数组”名 a 本身就是一个指针,与常规指针不同的是,它是一个不能移动的所谓常指针。如在函数外有定义:float a[3] ...
2018-07-09 11:31:50 7200
转载 编程范式(斯坦福大学)学习笔记《二》
斯坦福大学开放课程:编程范式学习笔记《二》本课讲述了C/C++关于int,float等数据的底层表示,以及赋值操作所进行的处理。本节内容比较简单,应该属于组成原理的基础知识,各种码的表示和底层实现,但是,讲述还不错,特别是为何要这样形成补码,比单纯记忆强多了,这样才理解了取反加1的原因,比当初上课的时候要理解深刻多了。bool 1bytechar 1 byteshort 2 byt...
2018-07-06 17:11:26 690
转载 编程范式(斯坦福大学)学习笔记《一》
斯坦福大学开放课程:编程范式学习笔记《一》编程范式(Paradigm) Lesson 1 读书笔记:列举几种常见的编程语言(范式):CAssemblyC++Concurrency programming(并行编程) (只是一种范式,而不是语言,可以使用C/C++实现并行编程)SchemePythonC是面向过程,C++面向对象。C语言是函数调用函数,因此就像一个多级标题一样,通过函数A调用B, 而...
2018-07-06 11:41:55 1877
原创 二维数组与指针
举例说明C++中二维数组与指针的应用:#include <iostream>using namespace std;int main() { int a[2][3] = {{0,1,2},{3,4,5}}; cout << a << endl;//第一行数组的第一个数据的地址(a[0][0]) cout << *a << en...
2018-07-04 20:33:16 624
原创 C++中用fixed以及setprecision 设置输出精度
从以下的例子可以快速地学习如何设置输出精度。#include <iostream>#include <iomanip>using namespace std;int main( void ){ const double value = 12.3456789; cout << value << endl; // 默认以6精...
2018-06-29 16:58:18 9529 1
原创 const关键字常用用法
1.定义常量const int Pi =3.142.定义常量指针 常量指针:指向常量的指针,在指针定义语句的类型前加const,表示指向的对象是常量。 (1)不能通过常量指针修改其指向的内容。Int n,m;const int* p = & n;*p = 5;//编译出错n = 4;//编译成功p = &m;//编译成功,常量指针的指向可以变化 (2)不能把常量指针赋...
2018-06-24 16:35:06 318
原创 Eclipse for C++新建工程没有显示minGW
现象Eclipsefor C++和minGW都安装完成,环境变量已经设置,但是在eclipse for C++中新建工程时,toolchain中没有显示minGW。原因安装配置过程都没有出错,很有可能是因为下载的minGW是无效的。解决办法重新下载有效的minGW。链接:https://pan.baidu.com/s/1RYGf5925754lx8_TnOu5eA密码:lof3这个压缩包是有效的,...
2018-06-12 13:25:31 2702
原创 eclipse第一次打开报错“An error has occurred. See the log file……”
现象Eclipse for C++安装完成,打开eclipse.exe后,系统报错:原因之前博主电脑安装的是jdk10版本,但是eclipse并不能和jdk10的环境完全融合。解决办法重新安装jdk8版本,并进行Java版本切换。1.下载安装jdk8,放在与jdk10同一路径下:2.修改JAVA_HOME改成jdk8的安装路径 C:\Program Files\Java\jdk1.8.0_1713...
2018-06-09 22:14:44 22239 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人