关于传参的两种方式 传值与传址 的深入理解 (附 hdu3999

真的真的真的真的好久没码了……………… 最近因为要复习数据结构所以才兴起想要码一些跟考试相关的 于是找了一下 BST 和 AVL 的题做做 结果一下搜就找到了 hdu3999 解法很简单 只要建立一个 BST 再对其先序遍历即可 然而………… 问题出在这个代码上 int main() { int tmp; while(scanf("%d",&n)!=EOF) { root=NULL; for(int i=0; i

setjmp 与 longjmp

最近看到C看到一个很让人费解的函数组合 setjmp 和 longjmp 使用方法还是比较简单的 setjmp设置跳跃点 longjmp表示跳跃 具体的操作如下 首先定义一个 唯一的标志性 flag jmp_buf变量 再加上 函数申明 int setjmp(jmp_buf env); void longjmp(jmp_buf env, int value); 当设置 jmp 即第一次执行 setjmp时 函数的返回值都为 0 通过longjmp 跳跃至相同jmp_buf 的setjmp函数里并执行 set_jmp的返回值将变成 long_jmp设置的 value 理解起来后发现实际上是跟 goto 差不多的 但long_jmp 跳得更远一些 goto只限于同一函数内 long_…

关于open操作的O_EXCL的存在应用价值理解

在我最近学习Linux C的过程中 总是看到这样的打开方式 open(const* pathname,O_CREAT|O_EXCL); O_CREAT 简单 就是想打开的文件如果不存在的话就会自动创建文件 而 O_EXCL 他的作用就是如果要创建一个文件 并且这个文件已经存在的话 会直接返回 并且 如果打开的文件是符号链接文件的话 也会直接返回 一开始真的感觉莫名其妙 之后搜了一下才知道自己的菜逼思维 如果不加O_EXCL 的话 如果文件存在 那么这个文件依旧会被打开 此时我们假设有这样的一个需求:某个任务只能单个进程处理执行 多进程会影响到该任务的执行 为了不让多进程打开处理这个文件 并且不用O_EXCL的话 可能会这样写 if( access(file, R_OK) == -1 ) /* 首先检查文件是否存在 / open(file, O_RDWR | O_CREAT,…