C语言基础
文章平均质量分 50
sweird
知其然,并知其所以然。揭开上层重重迷雾,去了解计算机的本质,去了解操作系统的本质,解开曾经的迷惑,怀着十二分的热情,用我的一生去完成。
展开
-
insert sort algorithm
void insert_sort(int a[], int len){ int i, j; for(j = 1; j < len; j++){ int key = a[j]; i = j-1; while(i >= 0 && a[i] > key){ a[i+1] = a[i];原创 2010-03-04 10:58:00 · 699 阅读 · 0 评论 -
C语言高级用法---container_of()
在Linux内核源码中,实现和链表相关的接口list_entry()时,会调用container_of()宏定义,它的作用是:给定结构体中某个成员的地址、该结构体类型和该成员的名字获取这个成员所在的结构体变量的首地址。container_of()宏定义实现如下所示/** * container_of - cast a member of a structure out to the cont...原创 2019-06-03 13:58:15 · 24465 阅读 · 4 评论 -
C语言高级用法---typeof( ((type *)0)->member )和offset_of()
ANSI C标准允许值为0的常量被强制转换成任何一种类型的指针,并且转换的结果是个NULL,因此((type *)0)的结果就是一个类型为type *的NULL指针.如果利用这个NULL指针来访问type的成员当然是非法的,但typeof( ((type *)0)->member )是想取该成员的类型,所有编译器不会生成访问type成员的代码,类似的代码&( ((type *)0)...原创 2019-06-03 09:20:00 · 7210 阅读 · 0 评论 -
C语言高级用法---typeof()关键字
前言typeof() 是GUN C提供的一种特性,可参考C-Extensions,它可以取得变量的类型,或者表达式的类型。本文总结了typeof()关键字的常见用法,并给出了相应的例子,以加深理解 。typeof()关键字常见用法typeof()关键字常见用法一共有以下几种。不用知道函数返回什么类型,可以使用typeof()定义一个用于接收该函数返回值的变量#include <...原创 2019-06-02 17:46:55 · 89896 阅读 · 8 评论 -
静态库*.a和动态库*.so生成及调用
gcc编译器工具一般位于/usr/bin或者/usr/local/bin目录,但它会从其它位置运行各种编译器支持的应用程序,这个位置可能是 /usr/lib/gcc-lib/目录,GNU C/C++编译器的各个工具和GNU专用头文件都保存在这里。 头文件,一般位于/usr/include,包含头文件编译:gcc -I/指定路径/include hellworld.c 库文件,一般原创 2011-08-22 17:35:15 · 3872 阅读 · 1 评论 -
C不会自动检查越界
如图,我为ptr申请了4个字节的内存,但我拷贝了大于4个字节的字符串给ptr,最后ptr可以正常打出。我原本以为这样子会出现段错误什么的,但很遗憾,它竟然能正确打出。一开始我还没明白这到底是为什么? 后来百度知道发帖,知道原来是因为c不会自动检查数组越界,本题看来是正确的,那是原创 2011-07-15 18:08:22 · 1027 阅读 · 0 评论 -
c语言全局变量和局部变量
局部变量可以用类型相符的任意表达式来初始化,而全局变量只能用常量表达式初始化,例如:例如,全局变量pi这样初始化是合法的: double pi = 3.14 + 0.0016; 但这样初始化是不合法的: double pi = acos(-1.0); 然而局部变量这样初始化却是可原创 2011-07-13 16:21:27 · 2186 阅读 · 0 评论 -
一题段错误的思考
#include #include #include int main(int argc, char **argv){ char *p = malloc(sizeof(char));// int *p = 0x804b008; *p = x; printf("%c/n", *p); return 0;}定义指针时要进行初原创 2010-03-14 11:31:00 · 1237 阅读 · 3 评论 -
quick sort algorithm
void quick_sort(int a[], int l, int r){ int i, m; if(l >= r) return; for(m = l, i = l+1; i <= r; i++) if(a[i] < a[l]) swap(a, i, ++m); swap(a, l,原创 2010-03-04 10:01:00 · 774 阅读 · 1 评论 -
select sort algorithm
void select_sort(int a[], int len){ int i, j; int min; for(j = 0; j < len-1; j++){ min = j; for(i = j+1; i < len; i++) if(a[i] < a[min])原创 2010-03-04 11:50:00 · 633 阅读 · 0 评论 -
Linux内核中链表的实现
前言曾经写过一篇《Linux内核中链表的使用》, 这篇文章只是参考LKD3e介绍了内核中链表的使用方法,并没详细介绍链表的具体实现和该链表的组织方式,本文将更深入学习内核中的链表相关的知识,并解答上述问题。传统双向链表和内核中的双向链表的区别Linux内核中实现的链表,和平时看到的链表不太一样,它不是把具体的数据结构塞入到链表中,而是把链表节点存放到用户的数据结构中。这个设计的主要目的是因为...原创 2019-06-03 16:43:45 · 711 阅读 · 0 评论