C语言知识库
Quinn0918
在生活中,对于自己和别人,我常常会说:“人生没有白走的路,每一步都算数!”
在干部生涯中,至今还担任院学生会主席,我经常对我的干部们说“在别人之上要把别人当人,在人之下要把自己当人。”
此时此刻,我想在博客里对自己说:“就在这儿,一定要成功!”
展开
-
值传递和指针传递
在C语言中,函数的参数和返回值的传递方式有两种:值传递和指针传递。值传递和指针传递初学者总会有一种朦胧的感觉,所以建议把指针传递的概念摸透,才能熟练应用。值传递示例:x其实是n的一份临时拷贝,所以并不会改变n的值。原创 2017-03-28 19:50:13 · 823 阅读 · 0 评论 -
实现静态顺序表和动态顺序表
其实顺序表的静态实现以及动态实现和通讯录的实现原理基本上是一致的,在这里就不做过多的解释,直接贴代码。 静态通讯录:http://blog.csdn.net/quinn0918/article/details/71937767 动态通讯录:http://blog.csdn.net/quinn0918/article/details/72182598 文件流通讯录:http://blog.csd原创 2017-06-02 18:58:53 · 795 阅读 · 0 评论 -
c语言经典面试题
上面两幅图中有六道经典C语言面试题,真的可以认真看看!!!直接贴代码:#include<stdio.h>#include<windows.h>#include<assert.h>void bit_set(unsigned char *p_data, unsigned char position, int flag){ assert(p_data!=NULL); if ((pos原创 2017-06-05 18:35:16 · 1227 阅读 · 0 评论 -
基于单链表的面试题——进阶篇
点击查看如何实现单链表以及单链表的一些基本操作函数 点击查看基于单链表经常见的面试题——基础篇1.判断单链表是否带环?若带环,求环的长度?求环的入口点? 判断是否带环:ListNode *IfRing(ListNode *list)//判断单链表是否带环,返回交点{ ListNode* slow = list; ListNode* fast = list; //是否带环原创 2017-06-12 14:07:37 · 1011 阅读 · 1 评论 -
注释转换(c->c++)小项目
程序新思路: 注释转换一开始去想的时候,会觉得很复杂。因为在一个源文件里出现注释的情况虽然不会太多,但是可能会出现各种各样,形形色色的注释,在转换程度上去想的时候会觉得很复杂,不同的问题都要有不同的解决方法的。在这里简单的罗列注释转换可能出现的几种情况:// 1.一般情况int num = 0;/* int i = 0; */// 2.换行问题/* int i = 0; */int j =原创 2017-05-31 18:02:46 · 649 阅读 · 0 评论 -
利用文件流实现通讯录
之前呢,我已经写过两种形式的通讯录: 静态通讯录:http://blog.csdn.net/quinn0918/article/details/71937767 动态通讯录:http://blog.csdn.net/quinn0918/article/details/72182598fwrite函数原型:size_ t fwrite(const void* buffer, size_ t si原创 2017-05-19 13:26:33 · 1023 阅读 · 0 评论 -
实现动态版本通讯录(在简易通讯录的基础上)
实现一个动态版本通讯录:**通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址**提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人首先我们要了解动态内存分配: 动态内存分配中有 free,mall原创 2017-05-15 17:37:12 · 803 阅读 · 0 评论 -
可变参数列表源码分析与实现
1,首先,怎么得到参数的值。对于一般的函数,我们可以通过参数对应在参数列表里的标识符来得到。但是参数可变函数那些可变的参数是没有参数标识符的,它只有“…”,所以通过标识符来得到是不可能的,我们只有另辟途径。我们知道函数调用时都会分配栈空间,而函数调用机制中的栈结构如下图所示:| ...... |------------------| 参数2转载 2017-04-22 19:11:27 · 942 阅读 · 0 评论 -
函数的调用过程,栈桢的创建和销毁
为了能够说明wen1.函数的调用过程主函数main里定义了4个局部变量,然后调用同文件里的foo1()函数。4个局部变量毫无疑问都在进程的栈空间上,当进程运行起来后我们逐步了解一下main函数里是如何基于栈实现了对foo1()的调用过程,而foo1()又是怎么返回到main函数里的。为了便于观察的粒度更细致一些,我们对test.c生成的汇编代码进行调试原创 2017-04-20 14:35:54 · 1683 阅读 · 1 评论 -
qsort函数详解
qsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定)。集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题。所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分。具体介绍: void qsort( void *base, size_t num, size_t wid原创 2017-05-10 21:07:48 · 1403 阅读 · 3 评论 -
指针和数组的理解
数组指针定义 int (*p)[n]; ()优先级高,所以p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也是p的长度。如果执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //p为指针变量名,该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的原创 2017-05-09 23:11:30 · 496 阅读 · 1 评论 -
数组的相关运算(sizeof和strlen的灵活应用)
在我们数组的运算当中,经常会碰到或者用到求数组的长度,求数组中某一个元素的地址的长度或者是数组的运用。我们经常会搞混sizeof和strlen在不同类型数组中的应用,因此我在这里详细的罗列出来我们常见的以及常用的一些典型例子。通过程序的方式加注释 方便大家理解,而且可以实时验证。#include #include #include int main(){ int a[3][4原创 2017-04-05 19:57:03 · 627 阅读 · 0 评论 -
宏和函数的区别
宏和函数的区别:宏相对于函数的优点:1、在运行速度上宏要比函数的运行速度快, 函数需要调用并且返回值这个过程,而宏却不需要。2、在参数的类型定义上,宏没有类型要求,适合于任何能用>号比较的类型,而函数的参数必须声明特定的类型。3、宏还有一个特殊的地方,宏可以接受类型作为参数。函数相对于宏的优点:1、如果一个函数要被调用很多次,使用函数可以省略很多不必要的内容,而每次使用宏,原创 2017-04-13 10:59:49 · 1251 阅读 · 0 评论 -
写一个宏可以将一个数字的奇数位和偶数位交换
宏函数在C语言编程中有不可忽视的作用,并且数字二进制的奇偶位交换也比较常见,所以用宏函数来实现数字二进制的奇数位和偶数位交换不失为一个很好的方法。首先我们要清楚宏函数的用法,其次要有用宏函数实现该功能的整体思路,下面我带着大家分析一下:例:将数字5(0101)交换二进制奇偶位为(1010)即数字10。就是将数字的二进制的第0位和第1位交换,第2位和第3位交换,后面以此类推。首先我们原创 2017-04-11 19:02:43 · 821 阅读 · 0 评论 -
预处理标识符(两个int整数m和n的二进制表达中,有多少个位(bit)不同)
常用的预处理标识符有很多,以下是几个预定义标识符:(1)__FILE__ :表示正在编译的文件(2) __LINE__:表示的是正在编译的文件的行号(3)__DATE__:表示的是正在编译的日期字符串(4)__TIME__:表示的是正在编译的时间字符串代码如下:#include #includeint main(){ int m = 1999;//0111110011原创 2017-04-11 18:56:41 · 899 阅读 · 0 评论 -
scanf和getchar的小知识
#include #pragma warning(disable:4996)int main(){char input[10] = { 0 };char c = 'w';scanf("%s", input);//scanf不会读取缓冲区中的空格或回车,将空格或回车留在缓冲区c = getchar(); //getchar会读取你输入的值直到遇到空格或回车原创 2017-03-20 20:00:55 · 613 阅读 · 0 评论 -
C语言中的运算符总结
1.算数运算符+ - * / %算术运算符应该注意的是当一个浮点型的数除以一个整型的数,得到的结果肯定是浮点型2.移位操作符>> 左边丢弃,右边补0(不区分算术移位和逻辑移位)>> 右移操作符算数移位中右边丢弃,左边补符号位;逻辑移位中左边补0。右移1位相当于除2,左移1位相当于乘2。负数的右移:负数右移=-1,负数左移=03原创 2017-03-26 11:12:53 · 858 阅读 · 0 评论 -
基于单链表经常见的面试题——基础篇
点击进入查看如何实现链表以及链表的一些基本操作函数 基于单链表的面试题——进阶篇1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用?首先我们时间上来进行分析:(1)对于顺序表。不论是静态的还是动态的,他们都是连续的存储空间,在读取上时间效率比较快,可以通过地址之间的运算来进行访问,但是在插入和删除操作会出现比较麻烦的负载操作。 (2)对于链表,因为他是链式存储。在我们需要的时候才在堆上开原创 2017-06-09 21:18:49 · 1692 阅读 · 0 评论