C语言中##的用法总结 今天看linux操作系统源码是有这么一段: #define _syscall0(type,name) \type name(void) \{ \long __res; \__asm__ volatile ( "int $0x80" \// 调用系统中断0x80。:"=a" (__res) \// 返回值??eax(__res)。:"" (__NR_##name)); \// 输入为系... 2023-06-13 C语言用法总结文章基础课C语言基础
C语言精确延时方法汇总 sbit LED = P1^0; // 定义一个管脚(延时测试用)unsigned int i = 3; // 注意i,j的数据类型,unsigned char j = 3; // 不同的数据类型延时有很大不同//-----------------各种精确延时语句-----------------------------------while( (i--)!=1 ); // 延时10*i个机器周期... 2023-06-13 C语言精确延时方法汇总文章基础课C语言基础
C语言中的变量详解经典汇总 局部变量:也称内部变量。局部变量是在函数内做定义说明的,其作用域仅限于函数内部,离开函数后再使用这种变量是非法的。如:voiddelay(unsignedintx){unsignedchari,j;//ij的作用域只是在delay函数内}关于局部变量的作用域的几点说明:1、主函数中定义的变量也只能在主函数中使... 2023-06-13 C语言变量经典汇总文章基础课C语言基础
C程序中关于c和h的包含问题 文件包含处理是指在一个源文件中,通过文件包含命令将另一个源文件的内容全部包含在此文件中。在源文件编译时,连同被包含进来的文件一同编译,生成目标目标文件。很多人再初学时都会对这个很晕,怎么写文件件? 怎么包含才能避免重定义? 等等问题。。。其实这个只要了解了文件包... 2023-06-13 C程序C文件H文件问题文章基础课C语言基础
C语言数组分析经典汇总 数组和指针之间本来没有什么关系,数组就是数组,指针就是指针,之间并没有关系,只是因为某些相似特性使得我们在分析的过程中存在较大的迷惑。数组就是一个连续存储空间的存储的数值。指针就是指针,指针变量所在内存中存储的值都是地址。C 语言中数组的大小必须是一个常数,但是不... 2023-06-13 C语言数组分析经典汇总文章基础课C语言基础
结构体中动态内存的管理(malloc和free) 其中最大的问题是:结构体中指针变量没有指向一块合法的内存空间,就对指针参数进行操作,这也是很多C语言程序员经常犯的错误。简单的实例如下:struct student { char *name; int score; }stu,*pstu;int main() { strcpy(stu.name,"Jimy"); stu.score = 99;strcpy(pstu->name... 2023-06-13 结构体动态内存管理mallocFreeC语言文章基础课C语言基础
共用体union的妙用 union主要是将各种类型的数据存放在一段固定的存储器中,存储器的大小由union中需要最大存储器的数据类型决定。比如:union student{char ***;int age;long number;double score;};其中long、double需要16个字节,而char 只需要1个字节,因此该共用体占用16个字节。union的关键... 2023-06-13 共用体union妙用C语言文章基础课C语言基础
void 指针的妙用 在看uC/OS-II中我阅读源码时发现其中竟然很少有关于链表的操作。开始也没有仔细的去分析原因,我甚至认为位图的方式取代了链表。因为uC/OS-II基本上可以任务是基于数组等静态内存分布的方式,全局变量的形式可以通过位图简单的链接在一起。但是在阅读事件标志组的过程中我发... 2023-06-13 void指针妙用C语言文章基础课C语言基础
转义字符、格式控制问题总结 转义字符是容易出题目的地方,记得没错的我应该是好几次出错啦,今晚好好的复习了一下。主要需要注意的转义字符如下所示:\n,\t,\b,\r,\f,\\,\',\",\ddd,\xhh,这些转义字符在ASCII中都有固定的值,在求解字符串长度的过程中很容易出现错误,每种转义字符都有自己的作用。需要注... 2023-06-13 转义字符格式控制问题总结文章基础课C语言基础
伴随数组、计数排序的运用 一个星期没有写了,今天还是留点时间写一写自己的博客,周六去考试了趋势科技,感受到了自己在软件设计方面还存在的知识缺陷,测试、网络安全等方面都是空白,其他的相对来说要好一点,今天还没有收到面试通知应该是打了一次酱油了,不够收获还是蛮多的,记得第一题是关于unicode方面的... 2023-06-13 伴随数组计数排序运用C语言文章基础课C语言基础
几种查找数组的前K个最小值的算法 主要的思想包括如下的几种1、对数组进行排序,然后前K个元素就是需要查找的元素,排序的方法可以采用快速排序,但是我们知道在快速排序中如果已经是有序的数组,采用快速排序的时间复杂度是O(N^2),为了解决这种问题,通常选择随机选择一个数组值pivot作为基准,将数组分为S1 = pivot... 2023-06-13 查找数组最小值算法C语言文章基础课C语言基础
单向链表基本操作的递归实现 为了熟悉递归的思想,我尝试了采用递归的方式实现单向链表的基本操作。单向的链表是C语言课程中接触到的中比较复杂的数据结构,但是他确实其他数据结构的基础,在一般情况下都是采用迭代的形式实现,迭代的形式相比递归要节省时间和空间,但是代码相对来说要复杂,递归往往只是简单... 2023-06-13 单向链表基本操作递归实现C语言文章基础课C语言基础
C++标准库中的list设计 在数据结构中链表是比较基本的类型,在C++中链表是基于模板的类,因此在实际的使用过程中需要涉及到实际的类型。#includelist lint;在C++中关于list的接口比较丰富,主要是关于大小,数据的插入、删除等。但是在C++中引入了迭代器的概念,这个迭代器是关于关于容器中比较重要的一... 2023-06-13 C++标准库list设计文章基础课C语言基础
多维数组与指针知识汇总 多维数组的数组名并不是很多网友描述的多级指针,我仅以二维数组作为研究对象,进行一定的分析。 二维数组int A[M][N],可以认为是存在M个元素的数组,且每一个元素都是长度为N的int型数组,这样就能比较清晰的理解了数组。数组名在很多情况下转换为指针,且数组名是数组首个元素的... 2023-06-13 多维数组指针C语言文章基础课C语言基础
比较型排序算法知识总结 归并排序是一个递归的问题,采用分治的思想实现,但是这种算法需要额外的存储空间,快速排序虽然是实践中比较常用的算法,但是对于有序的数组采用快速排序就是灾难。比较型算法的时间复杂度最优也只能到达O(NlogN)。 插入排序算法:该算法的复杂度为O(N^2),需要比对N-1趟,最坏情况... 2023-06-13 排序算法比较型C语言文章基础课C语言基础
二叉堆的C语言实现知识 二叉堆是非常有特点的数据结构,可以采用简单的数组就能实现,当然链表的实现也是没有问题的,毕竟是一个二叉树问题,当然可以采用链表实现。采用数组实现时,可以找到两个特别明显的规律:左儿子:L_Son = Parent * 2;右儿子:R_Son = Parent * 2 + 1;二叉堆是一颗完全填满的树,可能例外... 2023-06-13 二叉堆C语言数据结构文章基础课C语言基础
C语言栈的经典运用汇总 但是栈的运用还不止这些,还有很多,其中几个典型的运行如下:判断平衡符号,实现表达式的求值(也就是中缀表达式转后缀表达式的问题以及后缀表达式求值问题),在路劲探索中实现路劲的保存也可以说是栈的经典运用之一。具体的问题具体分析,只要满足先入后出特性的问题都能找到现成的数... 2023-06-13 C语言堆栈经典运用文章基础课C语言基础
链表中几个较重要的问题 /*单链表*/ typedef struct list { struct list *next; int data; } List_t, *List_handle_t;/*双向链表*/ typedef struct Dblist { struct Dblist *next; struct Dblist *prev;int data; }DList_t, *DList_handle_t;/*多层次链... 2023-06-13 链表C语言重要问题文章基础课C语言基础
C/C++中关于局部函数中更新实参指针的方法 /*错误的实现*/ void getmemory(int *ptr,int size) { ptr = (int *)malloc(sizeof(int)*size); }/*返回值类型*/ int * getmemory(int size) { int *temp = (int *)malloc(sizeof(int)*size); if(temp != NULL) { return temp;... 2023-06-13 CC++局部函数实参指针方法文章基础课C语言基础
C++中复制构造函数与重载赋值操作符的深入分析 复制构造函数与重载赋值操作符实现的大题相同,如果没有手动的实现,那么编译器会自动生成一个,而且这两个函数的参数也是一致的,是不能够改变的,这是为什么呢?这是值得我们去分析和推敲的。析构函数相比前面的两个存在一个巨大的差别,就是无论我们是否定义这个函数,编译器都会自动... 2023-06-13 C++复制构造函数重载赋值操作符文章基础课C语言基础
整数与字符串转换的C实现 比如:如何实现两个值中的最大值:((a+b) + abs(a-b))/2如何实现不依靠中间量实现两个变量值的交换:a = a + b;b = a - b;a = a - b;或者a = a^b;b = a^b;a = a^b;其中后面的这种方式更加的优越。sizeof与strlen的区别其中sizeof是一个操作符,在编译过程中就能确定结果,但是str... 2023-06-13 整数字符串转换C语言文章基础课C语言基础
C语言中字符串与字符数组分析 字符串与字符数组的区别在过去我一直是处于一知半解的状态,字符串是通常被认为是常量,是保存在一段固定的内存中的,这段内存是以'\0'为结束符,这段内存通常只能通过一个指针来找到。字符数组其实和其他数组没什么区别,只是保存的数据类型是字符类型(char),它没有强制要求最后... 2023-06-13 C语言字符串字符数组分析文章基础课C语言基础
atexit函数和exit函数的理解 我们通常认为C语言的起始函数是main函数,实质上一个程序的启动函数并不一定是main函数,这个可以采用链接器来设置,但是gcc中默认main就是C语言的入口函数,在main函数启动之前,内核会调用一个特殊的启动例程,这个启动例程从内核中取得命令行参数值和环境变量值,为调用main函数做... 2023-06-13 atexit函数exit函数理解文章基础课C语言基础
C/C++中宏定义的经典运用 以前在没有代码阅读量的时候总是以为宏定义就是简单的定义一些常量什么的,实质上不然,宏定义完全可以写成函数的形式,但是宏定义和函数有一定的差别,函数的调用一般采用栈的方式实现,这时候存在局部变量,形参、实参等问题,如果不理解C语言的本质,很多时候非常容易搞错,但是宏定义... 2023-06-13 C语言C++宏定义文章基础课C语言基础
异或运算在算法中的经典运用 比如首先排序、然后在查找不同的数据就能找到这两个数字,这种实现方法的时间复杂度应该是在O(NlgN),因为比较排序的算法最好的时间复杂度就是这样。但是乍一看,这题就解决了,但是还没有充分运用一个条件,绝大多数元素是成对出现的,这个条件的作用是什么呢? 当然还有的思路就是ha... 2023-06-13 异或运算算法C语言文章基础课C语言基础