2019年10月14日

assert()的使用

摘要: assert()是定义在assert.h中的恶宏,其用法是 assert(条件表达式); 若条件为真,什么也不做;做条件为假,强制终止程序。 比如说在条件分支中,如果程序没有Bug,我们确定某个分支绝对不会被走到,可以这样写: … case .. : … default: assert(0); 如果程序没有Bug,肯定不会走到分支default;在这个分支里强行退出程序,这种方法是值得肯定... 阅读全文

posted @ 2019-10-14 15:41 freshair_cn 阅读(156) 评论(0) 推荐(0) 编辑

参数入栈的顺序以及栈/堆的生长顺序

摘要: 首先,栈的生长方向与操作系统无关,更多是由CPU决定的;其次,栈与堆的生长方向是刚好相反的。为什么栈与堆的生长方向会刚好相反?可参考链接的说法:https://www.quora.com/What-is-the-logical-explanation-for-stacks-typically-growing-downward-and-heaps-growing-upward?awc=15748_1... 阅读全文

posted @ 2019-10-14 14:43 freshair_cn 阅读(1165) 评论(0) 推荐(0) 编辑

指向函数的指针

摘要: 函数可以在表达式中被解读为“指向函数的指针”,函数名就是该指针。“指向函数的指针”本质上也是指针(地址),所以可以将它赋值给指针型变量。 那么“指向函数的指针的变量”如何声明呢? 比如有以下函数原型: int func(double d); 保存指向该函数的指针的变量的声明如下: int (*func_p)(double); 其中func_p是指针变量。 通过func_p调用func大体上是这样子... 阅读全文

posted @ 2019-10-14 11:00 freshair_cn 阅读(1003) 评论(0) 推荐(0) 编辑

各变量入栈顺序

摘要: 用个简单的测试顺序即可测得,地址从低到高,个变量的入栈顺序为: “静态变量”框的部分,各变量入栈的顺序是(从低地址到高地址):函数内static变量->文件内static变量->全局变量。 阅读全文

posted @ 2019-10-14 10:19 freshair_cn 阅读(384) 评论(0) 推荐(0) 编辑

导航