c语言
huasir_hit
这个作者很懒,什么都没留下…
展开
-
for循环内switch中带有break、continue的问题
如下代码:char a[5]="abcd";for(i=0;i{switch(a[]i){case 'a':printf("a\n");break;case 'b':printf("b\n");break;case 'c':printf("c\n");continue;default:printf("default\n");continue;}p原创 2017-03-29 18:06:39 · 21850 阅读 · 0 评论 -
malloc函数详解
在逛知乎过程中,偶然发现一个问题:malloc(0)从堆空间申请0个字节,咋办?是报错,还是返回正确地址?申请的空间又有和意义?内存碎片又是什么?带着这一系列问题,我到网上找到了一篇不错的博客,对其解释比较恰当。不过首先列出我自己实测的代码情况:#include #include int main(int argc, char const *argv[]){ char *p = (c原创 2017-07-21 18:12:49 · 399 阅读 · 0 评论 -
如何判断单链表里是否有环以及查找环的入口
先说明一下单链表里有环的示意图: 即链表的尾结点指向链表中的某一个结点(结点6的next指向结点3)判断单链表是否有环:快慢指针定义两个指针slow, fast。slow指针一次走1个结点,fast指针一次走2个结点。如果链表中有环,那么慢指针一定会再某一个时刻追上快指针(slow == fast)。如果没有环,则快指针会第一个走到NULL。如果单链表里有环,那么如何查原创 2017-07-16 15:18:52 · 1392 阅读 · 1 评论 -
C语言的条件编译
转载自:http://hi.baidu.com/xiaomambzh/item/272663c2476ca1b10c0a7b2dC语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifndef有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代转载 2017-07-16 14:00:55 · 526 阅读 · 0 评论 -
C语言位域的定义和使用
位域的定义和使用 C Bit Fields转自http://www.360doc.com/content/09/0318/16/113975_2846158.shtml位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,转载 2017-07-16 13:48:38 · 4515 阅读 · 0 评论 -
C语言操作界面菜单思考
C语言中,制作菜单操作界面是很常见的,一般都是通过scanf("%d",&i) 与switch(i)搭配来使用,这种方法很基础,我近来发现另外一种比较不错的方法,容错处理也有,可拓展性也高:#define BUFFERSIZE 256enum login_register_status {_f_main_, _login_id_, _login_passwd_, _udpport_, _regi原创 2017-06-25 23:51:07 · 22547 阅读 · 0 评论 -
C语言可变参数函数实现
转载自C语言中文网,链接如下:点击打开链接补充一点,在函数原型int printf(const char *format,...)中,固定参数不一定只有一个,有可能有多个,不管有多少个,va_start中一定是最后一个固定的参数,后续可变参数就用va_arg来接收,va_end来结束。转载 2017-05-31 13:44:37 · 500 阅读 · 0 评论 -
C和C++预处理
主要总结几点容易出错的:1. #define ADD(a,b) a+b 此处就很容易在后续引用中出现错误,例如:ADD(3,4)*ADD(5,6) 等价于 3+4*5+6,宏定义只是简单的替换,所以此处很明显不符合要求,正确宏定义为 #define ADD(a,b) ((a)+(b)) ,把a和b变量也用(),是因为如下:#define MUL(a,b) a*b 后续引用 MUL(3原创 2017-05-17 09:19:51 · 284 阅读 · 0 评论 -
C语言头文件<>和""的区别
1.头文件#include 2.头文件#include "":表示用户自己定义使用的头文件,编译器默认会从当前文件夹中寻找原创 2017-03-29 17:52:16 · 12365 阅读 · 0 评论 -
C语言实现链表(三)
如下是实现双向链表的源代码,主要包括:创建链表、插入结点(头插法、尾插法)、遍历链表、删除结点、排序(插入、快速)、主函数(验证函数功能),源代码如下:#include #include #include #include #include //不带头结点的双向链表的操作//本结构体只是为了实现原理的方便,采用了最简单的元素结构,只有一个int型、前指针pre、后指针nextt原创 2017-05-23 17:18:59 · 350 阅读 · 0 评论 -
C语言实现链表(二)
如下是单向链表的具体实现,主要包括:创建链表、增加结点(头插法,尾插法)、遍历结点、删除结点、排序(插入排序、选择排序、冒泡排序),最后是主函数的验证。在此先说下我的插入排序(交换指针)的思路:如图首先新建一个新头结点newHead,将原链表中从第二个有效结点开始之后所有的结点都链接到newHead,因此原链表就只有了一个有效结点,现在将newHead此链表中的结点(头结点除外)一原创 2017-05-23 17:02:13 · 324 阅读 · 0 评论 -
C语言实现链表(一)
近段时间,在学习数据结构的过程中,发现链表的知识点比较难,并且又是十分重要的,在次,将这一周左右的学习总结写成这篇博客。链表具体分类来说的话可以分为4大类:单向链表,双向链表,双向循环链表,十字交叉链表,分类根据不同规则可能不同,但是这不是重点,真正的重点是理解不同链表的简单实现方式,通过其实现方式,我们就很容易明白,对于有些具体问题,可能更适合用单向链表,而另外一些问题,可能就用双向循环链表原创 2017-05-23 16:17:27 · 363 阅读 · 0 评论 -
C++和C中自定义的头文件包含问题
近日在C++项目中遇到一个问题,大体是这样的:6个文件,分别是:Login.h,Login.cpp,List.h,List.cpp,Goods.h,Goods.cpp,因为其中三个.h文件是自定义的,分别对应相应的.cpp,我的Login.h中是所有的Login.cpp需要的函数的声明,然而在编译过程中,报错了,报错内容是Login.h中所有函数在此范围内全部未找到定义。这事我就觉得很奇怪,之原创 2017-05-12 09:45:04 · 3555 阅读 · 0 评论 -
C语言__attribute__的使用
转载自:http://www.cnblogs.com/astwish/p/3460618.html__ATTRIBUTE__ 你知多少?GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。转载 2017-08-24 16:39:31 · 16244 阅读 · 0 评论