摘要: 1. 不容忽视宏定义中的空格 #define f (x) ((x)-1) #define f(x) ((x)-1) 这两个宏是不同的 2. 宏并不是函数 由于宏知识预处理器进行简单的字符串替换,替换后会增加代码的体积,和该语言中所定义的函数不同。 在C语言中使用宏进行写代码时为 #include<i 阅读全文
posted @ 2019-12-17 18:08 楓羽 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 1. getchar函数 getchar的原型为 int getchar(); 在用的时候应该要注意返回的类型为int,防止发生字符被截断。 2.更新顺序 在对文件操作(读写交替进行)的时候一定要注意下面的情况 #include<stdio.h> int main(){ FILE *f; char 阅读全文
posted @ 2019-12-16 20:29 楓羽 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 练习5-1 假定一个程序在一个源文件中包含了声明: long foo; 而在另一个文件中包含了: extern short foo; 又进一步假定,如果给long类型的foo赋一个较小的值,例如37,那么short类型的foo就同时获得了一个值37.我们就能够对运行改程序的硬件做出什么样的推断?如果 阅读全文
posted @ 2019-12-13 19:19 楓羽 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 1. C运算符优先级 运算符(优先级从高到低) 结合律 ++(后置)、--(后置)、()(函数调用)、[]、{}、(复合字面量)、. 、-> 从左往右 ++(前置)、--(前置)、-、+、~、!、*(解引用)、&(取址)、sizeof、_Alignof(类型名)(本栏都是一元运算符) 从右往左 (类 阅读全文
posted @ 2019-12-12 20:41 楓羽 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 1. 假定对于下标越界的数组元素取其地址也是非法的,那么对于本书3.6(该标题下为4.6)节中的bufwrite程序应该如何书写? void bufwrite(char *p, int n){ while(n > 0){ int k, rem; if(bufptr == &buffer[N-1]){ 阅读全文
posted @ 2019-12-12 19:26 楓羽 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 导读 词法"陷阱" 语法"陷阱" 语义"陷阱" 链接 库函数 预处理器 可移植性缺陷 阅读全文
posted @ 2019-12-09 19:23 楓羽 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 1. 练习2-1 某些编译器允许嵌套注释。请写一个程序测试,要求:无论是对允许嵌套注释的编译器,还是对不允许嵌套注释的编译器,该程序都能正常通过编译,但是这两者情况下执行的结果却不相同。 #include<cstdio> #include<cstring> using namespace std; 阅读全文
posted @ 2019-12-09 19:18 楓羽 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 数组是一种支持随机访问的数据结构,而链表支持在结构中间某个位置插入和删除数据的时间复杂度$O(1)$的数据结构。 struct Node{ int v; struct Node *p, *n; Node(int val): v(val) {} }; Node* head, * tail; void 阅读全文
posted @ 2019-10-10 16:57 楓羽 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 栈是一种”后进先出“的线性数据结构。 1. 单调栈 单调栈是一种栈中元素具有单调性(不一定严格单调)的栈。 stack<int> stk; for(int i = 0; i < arr.size(); ++i){ while(stk.size() && arr[stk.top()] < arr[i] 阅读全文
posted @ 2019-10-10 16:56 楓羽 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 队列是一种”先进先出“的线性数据结构。 1. 单调队列 队列中的元素具有单调性(不一定严格单调) deque<int> q; for(int i = 0; i < arr.size(); ++i){ while(q.size() && i - q.front() > windows_size) q. 阅读全文
posted @ 2019-10-10 16:56 楓羽 阅读(101) 评论(0) 推荐(0) 编辑