发布时间:2013-01-09 12:12:56
在写股票软件过程中, 我希望把读取数据和显示数据的过程分离,他们的数据交换通过一个共享的链表来解决。通过shmget,可以获得一块共享的内存,但通常的情况下,一般申请的都是连续的空间,也就是说,我需要把数据存成一个数组,放在共享中。这个不是我的初衷。最初,我希望能只共享一个头指针,以为这样就可以直接共享链表了。但是结果是不可行的。经过一番实验和google,最终找到了解决办法。关键点:1.通常每个节点node,其中的next域存储的是*node, 即指向下个节点的指针。在这里,我们不能使用*node,否则读取程序是没法正确读取的。具体原因不清楚,但是经过实践证明,不可行。所以我们使用一个节点内......【阅读全文】
发布时间:2013-01-09 12:11:03
自己实现一个memcpy的函数。 需要考虑的地方在src和dest重叠的情况。 gcc编译有warning,运行通过。 点击(此处)折叠或打开 #include <stdio.h> #include <stdlib.h> void* mymemcpy(const void* src, void* dest, int size){ if(src == NULL || dest==NULL) return NULL; &nb......【阅读全文】
发布时间:2013-01-09 12:10:00
排序数组,使奇数在左边,偶数在右边,同时需保持元素相对顺序稳定。 正确解法使用冒泡即可。 代码中额外提供了基于快排的方法。(麻烦且没有必要,仅作思考和练手使用) 排序的本质是依据不同的权重计算方法,按权重进行排序。这里通过对数字奇偶性和它的的下标,计算了每个数字的权重,然后根据权重进行升序排列。 权重计算规则:奇数的权重小于偶数的权重,下标小的权重小于下标大的。 这种思想可用于各种排序的变体。 点击(此处)折叠或打开 #include <stdio.h> #include <stdlib.h> #define SWAP(a,b) (......【阅读全文】
发布时间:2013-01-09 12:07:57
第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。但是宏也有很多的不尽人意的地方。1、宏不能访问对象的私有成员。2、宏的定义很容易产生二意性。我们举个例子:#define square(x) (x*x)我们用一个数字去调......【阅读全文】