C语言
文章平均质量分 70
liutgnukernel
这个作者很懒,什么都没留下…
展开
-
C语言字符串数组与字符串指针详解
字符串数组与字符串指针在使用上有很多相似的地方,导致对两者的理解容易混淆.下面我们将从汇编的角度来详细审视一下两者的区别.原创 2016-05-24 13:55:58 · 840 阅读 · 0 评论 -
C语言以数组和结构体传参
C语言函数调用时的传参操作在32位x86机器上依赖栈进行.而在x86_64的机器上使用了部分寄存器作为辅助,但如果参数过多,寄存器不够使用,此时也必须借助于栈操作实现传参.尽管C语言对函数传递参数的个数没有明确限制(依编译器实现而定:http://stackoverflow.com/questions/9034787/function-parameters-max-number),但过多的参数传递势必影响代码执行效率.原创 2016-05-21 10:33:06 · 7125 阅读 · 1 评论 -
汇编代码中lea指令的另一种使用
今天看汇编代码的时候无意看到了一个lea指令的巧妙用法,觉得很有意思,有必要记录一下原创 2016-05-21 16:48:03 · 1485 阅读 · 0 评论 -
C语言函数内static关键字详解
static关键字有两类使用:函数外使用和和函数内使用,其中函数外使用主要用来限制被修饰的函数或变量作用域为本文件,没什么可多说的,下面重点说一下static关键字在函数体内的用法.原创 2016-05-21 20:29:39 · 10820 阅读 · 0 评论 -
调试器的原理-详解ptrace函数及fork父子进程跟踪实例
最近仔细研究了一下linux调试程序的原理.gdb是linux下最为强大的调试工具,而strace可以拦截程序执行过程中的系统调用.他们的背后都隐藏了一个强悍的支持函数ptrace().调试程序过程中我们可以单步执行,逐步检查程序的输入输出,从而判断程序错误,当然我们也可以抛弃gdb,自己实现一个"外挂程序",拦截主程序中我们感兴趣的东西,比如ssh或ftp登录密码.原创 2016-06-16 16:26:57 · 3117 阅读 · 0 评论 -
求解二叉树所有节点的深度
如何求解一个二叉树所有节点的深度?常见的算法是采用递归求解二叉树的最大深度,算法如下:int maxDepth(node *p) { if (!p) return 0; int lh = maxDepth(p->left); int rh = maxDepth(p->right); return lh > rh ? l原创 2016-10-05 21:13:04 · 8933 阅读 · 5 评论