![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux C
smileQL
这个作者很懒,什么都没留下…
展开
-
gcc结构体对齐
struct A a= //gcc支持的一种结构体赋值方式,好处是可以单独赋值{ //结构体变量对齐存放,所以a的大小为8字节 .a=4, .b=555,}// 定义类型的同时定义变量,s1是一个变量。struct student{ char name[20]; int age;}s原创 2017-04-09 10:20:06 · 1849 阅读 · 0 评论 -
常用字符串处理函数
4.6.8.4、函数库中库函数的使用(1)gcc中编译链接程序默认是使用动态库的,要想静态链接需要显式用-static来强制静态链接。(2)库函数的使用需要注意3点:第一,包含相应的头文件;第二,调用库函数时注意函数原型;第三,有些库函数链接时需要额外用-lxxx来指定链接;第四,如果是动态库,要注意-L指定动态库的地址。4.6.9.3、常用字符串处理函数(1)C库中字符串处理原创 2017-04-11 10:40:28 · 299 阅读 · 0 评论 -
堆内存杂记
按需分配。大块内存:堆内存管理者总量很大的操作系统内存块,各进程可以按需申请使用,使用完释放。程序手动申请&释放:手工意思是需要写代码去申请malloc和释放free。脏内存:堆内存也是反复使用的,而且使用者用完释放前不会清除,因此也是脏的。临时性:堆内存只在malloc和free之间属于我这个进程,而可以访问。在malloc之前和free之后都不能再访问,否则会有不可预料的后果。原创 2017-04-09 11:19:31 · 213 阅读 · 0 评论 -
指针数组、数组指针、二重指针
---指针数组与数组指针(1)指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。(2)数组指针的实质是一个指针,这个指针指向的是一个数组。int *p[5]; int (*p)[5]; int *(p[5]);总结:(第一步:找核心);(第二步:找结合);(第三步:继续向外结合直到整个符号完)。第一个:int *p[5]; 核心是p,p是一个数组,数组有5个元原创 2017-04-09 10:55:00 · 1325 阅读 · 0 评论 -
函数指针与typedef
---函数指针与typedef假设我们有个函数是:void func(void); 对应的函数指针:void (*p)(void); 类型是:void (*)(void);函数名和数组名最大的区别就是:函数名做右值时加不加&效果和意义都是一样的;但是数组名做右值时加不加&意义就不一样。写一个复杂的函数指针的实例:譬如函数是strcpy函数(char *strcpy(ch原创 2017-04-09 11:45:31 · 534 阅读 · 0 评论 -
大小端
高字节对应高地址(大端模式)、高字节对应低地址(小端模式)union myUnion{int a;char b;}int is_little_endian(void) //用共用体的方法写大小端检测 //如果是小端模式就输出1,如果是大端模式就输出0{union myUnion u1;u1.a=1;return u1.b;}int原创 2017-04-09 11:55:34 · 2651 阅读 · 0 评论 -
单链表
(1)时刻谨记:链表就是用来解决数组的大小不能动态扩展的问题,所以链表其实就是当数组用的。直白点:链表能完成的任务用数组也能完成,数组能完成的任务用链表也能完成。但是灵活性不一样。(2)简单说:链表就是用来存储数据的。链表用来存数据相对于数组来说优点就是灵活性,需要多少个动态分配多少个,不占用额外的内存。数组的优势是使用简单(简单粗暴)。// 构建一个链表的节点struct nod转载 2017-04-09 11:08:32 · 244 阅读 · 0 评论 -
双链表
---有效数据+2个指针的节点(双链表)(1)单链表的节点 = 有效数据 + 指针(指针指向后一个节点)(2)双向链表的节点 = 有效数据 + 2个指针(一个指向后一个节点,另一个指向前一个节点)---双链表的封装和编程实现 // 双链表的节点 struct node { int data;转载 2017-04-09 11:16:30 · 267 阅读 · 0 评论 -
共用体
struct mystruct{int a;char b;};// a和b其实指向同一块内存空间,只是对这块内存空间的2种不同的解析方式。// 如果我们使用u1.a那么就按照int类型来解析这个内存空间;如果我们使用u1.b那么就按照char类型// 来解析这块内存空间。union myunion{int a;char b;};s原创 2017-04-09 11:04:00 · 222 阅读 · 0 评论 -
C位操作
——取反:与1异或^(或整体取反用~) 置1:与1位于| 清0:与0位于&——左移《 右移》——获取bit3~bit7为1,同时bit23~bit25为1,其余位为0的数:((0x1f——获取bit4~bit10为0,其余位全部为1的数:~(0x7f---给定一个整型数a,设置a的bit3,保证其他位不变。a = a | (1或者 a |= (1---给定一个整形数a原创 2017-04-09 10:30:51 · 2494 阅读 · 0 评论 -
自己制作静态和动态链接库并使用
自己制作静态链接库并使用(1)第一步:自己制作静态链接库 首先使用gcc -c只编译不连接,生成.o文件;然后使用ar工具进行打包成.a归档文件 库名不能随便乱起,一般是lib+库名称,后缀名是.a表示是一个归档文件注意:制作出来了静态库之后,发布时需要发布.a文件和.h文件。 gcc aston.c -o aston.o -c ar -rc lib原创 2017-04-11 10:41:35 · 727 阅读 · 0 评论