c语言
文章平均质量分 64
gogogo_sky
不积跬步,无以致千里;不积小流,无以成江海
展开
-
高级指针的概念和应用完整版(图文讲解)
一:数组指针和指针数组的理解:1.首先我们从一个例子开始讲起includeint main(){int a[5][5]={0};//创建一个二维整型数组,并初始每个元素化为0;int(*p)[4]=NULL;//定义一个数组指针,这个指针指向大小为四,并且每个元素为int型的指针,将此指针初始化为空;p=(int(*)[4])a;//二维数组的数组名a,代表一个大小原创 2016-05-02 17:29:06 · 808 阅读 · 0 评论 -
链表面试题(六)---删除单链表倒数第k个结点
一、结构体定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-17 00:13:55 · 1250 阅读 · 0 评论 -
链表面试题(七)---合并两个有序链表
一、结构体的定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*原创 2017-05-17 00:49:33 · 378 阅读 · 0 评论 -
链表面试题(八)---约瑟夫环
一、结构体定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-17 01:00:45 · 235 阅读 · 0 评论 -
链表面试题(九)---判断一个链表是否带环
一、结构体定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-17 01:12:43 · 377 阅读 · 0 评论 -
链表面试题(十三)---求两个都不带环的链表相交的结点
一、结构体定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-17 02:04:27 · 304 阅读 · 0 评论 -
顺序表的链式储存
#ifndef __LINKLIST_H__#define __LINKLIST_H__#include#include#includetypedef int DataType;typedef struct LinkNode{ DataType data; struct LinkNode* next;}LinkNode,*pLinkNode;typedef stru原创 2016-06-06 15:59:36 · 616 阅读 · 0 评论 -
通讯录的实现(动态实现)
在静态实现1000人通讯录的基础上,这次我们来动态实现,可以动态开辟内存空间,不受人数的限制,但此处的不受限制是相对的,如果内存用完了,那也不能再添加联系人了;这次我们在静态实现的基础上再次优化,使用了枚举,以及对每次执行完一个功能时的页面进行优化,让使用者不再麻烦的去看最顶上的操作目录;首先定义了头文件:contacts.h#include #include #inclu原创 2016-05-17 00:56:40 · 488 阅读 · 0 评论 -
1000人通讯录的实现(静态实现)
实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址 提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人首先:建立一个头文件contacts.h#include #原创 2016-05-12 16:44:20 · 431 阅读 · 0 评论 -
memmove和memcpy函数的区别及实现
一、memmove()和memcpy()函数的strcpy()函数的区别;(1)使用的类型不同,strcpy()函数只对字符串进行操作;memmove()和memcpy()函数对所有类型都适用,为内存拷贝; (2)strcpy()以’\0’为拷贝的结束条件;而memmove()和memcpy()函数则是以第三个参数num进行控制拷贝;二、函数说明:1.memcpy函数的功能是从源src所指的内存地原创 2017-05-21 01:37:18 · 2718 阅读 · 8 评论 -
判断机器的大小端
一、概念: 大端模式(Big-endian): 是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中。 小端模式(Little-endian): 是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中。 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit原创 2017-05-21 20:15:23 · 250 阅读 · 0 评论 -
动态顺序表的实现(c语言版本)
一、前面实现的静态顺序表,虽然看起来也能储存数据,对表中数据进行管理;不过它是用大小固定的数组储存数据的;当数据太少的时候,空间用不完,浪费内存;当数据太多的时候;又会面临内存不足的麻烦;所以,静态顺序表不是很好;除非我们提前知道要储蓄管理的数据个数;要不然一定会面临空间用不完浪费或者空间太少不够用的情况;接下来;我们实现一个动态的顺序表;动态顺序表的底层实现是一个指向某个动态内存的指针;我们根据存原创 2017-04-27 22:32:31 · 558 阅读 · 0 评论 -
结构体内存大小的求法(内存对齐)&&c++类大小同样适用
一、内存对其的原因:1. 平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取特定类型的数据,否则抛出异常; 2. 性能问题:数据结构(尤其是栈)应该尽可能的在自然边界上对齐;员应在于,为了访问没有对齐的内存数据。处理器需要作两次内存访问;而对于对齐的内存处理器只需访问一次内存,就可以获得正确的数据; (以空间换区时间)二、结构体内存对齐规则:结构体的原创 2017-07-09 22:45:44 · 394 阅读 · 0 评论 -
C语言中volatile关键字的作用
本文转自:http://blog.csdn.net/chuckfql/article/details/7445476 作者:chuckfql一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执原创 2017-07-15 18:54:57 · 217 阅读 · 0 评论 -
链表面试题(十)---求带环单链表的环的长度
一、结构体的定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*原创 2017-05-17 01:20:25 · 569 阅读 · 0 评论 -
链表面试题(十一)---求带环单链表 环的入口点
一、结构体定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-17 01:37:18 · 333 阅读 · 0 评论 -
C语言编程中的缓冲区
下面介绍缓冲区的知识。一、什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据, 这部分预留的空间就叫做缓冲区。 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。二、为什么要引入缓冲区 我们为什么要引入缓冲区呢? 比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区原创 2017-07-16 20:29:00 · 927 阅读 · 0 评论 -
链表面试题(二)---链表逆序(链表反转)
一、结构体定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-16 23:15:26 · 460 阅读 · 1 评论 -
链表面试题(四)---查找链表的中间节点
一、结构体定义:typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*原创 2017-05-16 23:42:34 · 535 阅读 · 0 评论 -
链表面试题(五)---寻找链表的倒数第k个结点O(N)
一、结构体定义:typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*PList;二、函数实现 思路:定义两个原创 2017-05-17 00:01:51 · 357 阅读 · 0 评论 -
链表面试题(三)---当前结点前插入一个数据x
一、结构体定义typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*PList;二、代码实现: 思路:在当前结原创 2017-05-16 23:24:52 · 1073 阅读 · 0 评论 -
sizeof关键字的讲解和深入理解
1.sizeof(1)结果的单位为字节;(2)计算类型的大小; 写法:sizeof(int),其中括号不能省略;(3)也可以计算变量所占内存的大小; 写法:int i; sizeof(i); 其中括号可以省略;但为了好记,不出错,我们不论是求类型还是变量都写上括号;(4)sizeof一原创 2016-05-10 20:36:11 · 1047 阅读 · 0 评论 -
main函数参数的使用和指针数组的理解结合实例
1.使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:输入test.exe -a 1 2 执行1+2输出3函数实现:#define _CRT_SECURE_NO_WARNINGS#include#include int原创 2016-05-03 01:37:47 · 1383 阅读 · 1 评论 -
冒泡排序的例题讲解
1.常见的数字冒泡排序//#include//void Maopao(int arr[],int n)//{// int i=0;// int sign=0;// for(i=0;i<n-1;i++) // 比较趟数,每次回来一趟下一次两两比较的时候少一个数;// { // // int j=0;// sign=1;// for(j=0;原创 2016-05-04 02:22:24 · 3171 阅读 · 0 评论 -
浅谈可变参数列表
1.在函数原型中,列出了函数期望接受的参数,但原型只能显示固定数目的参数。让一个函数在不同的时候接受不同数目的参数是不是可以呢? 答案是肯定的,但存在一些限制。2.这时我们就用到了可变参数列表;(1)使用可变参数列表首先要假如头文件#include;它的含义有哪些呢?va_list char*类型的指针; va_start 宏va_arg 宏va_end原创 2016-04-18 17:17:06 · 471 阅读 · 0 评论 -
那些有趣的字符串操作函数(2)
不知不觉,字符串操作函数已经学习完了;今天就给总结几个比较少见但还是很重要的字符串操作函数:话不多说直接进入正题:1.模拟实现strchr:含义:返回一个字符串中某个字符第一次出现的地址,并输出此字符及其后面的字符串;程序代码:#include #include#includechar *mystrchr(char const *s,int c) {原创 2016-05-07 18:56:10 · 380 阅读 · 0 评论 -
排序的三种方式(冒泡,插入,和选择)
冒泡排序,直接插入排序 ,选择排序原创 2016-06-02 02:20:34 · 414 阅读 · 0 评论 -
结构体内存大小的求法(内存对齐)
结构储存分配是一个很重要,很基础的东西,面试的时候大多数面试官都会问到的问题,所以在此还是有必要去讲一下!首先我们必须知道是三个概念:1.结构体内存对齐。2.为什么要有结构体内存对齐?答:(1)使用空间来换取时间的设计;(2)和平台有关3.怎么求结构体的内存大小;其次以下概念我们必须牢记:1.默认对齐数:vs/vc------8;原创 2016-05-10 20:23:16 · 1171 阅读 · 1 评论 -
字符串操作函数模拟实现大全
在学习字符串的时候,我们常常会遇到一些相关功能的函数用于字符串,是问题变得简单:这些函数在c语言库函数中存在,我们直接使用就可以了;不过在一些面试中我们常常会被要求模拟实现这些函数;所以知道这些函数的实现过程还是有必要的:以下是本人在学习中总结的一些常用的字符串操作函数的模拟实现过程和一些使用例题:#define _CRT_SECURE_NO_WARNINGS 1 1.strcpy的实现:将原创 2016-05-04 01:09:38 · 665 阅读 · 0 评论 -
理解 assert()断言
头文件:assert.hassert即断言,也即做出一些假设,程序运行时如果假设不成立,程序就会中断。没有很多调试经验,可能不太理解断言在哪会用到,实际上我们在调试一个出错的程序时,由于程序出错的位置往往不是错误起因的位置,我们需要追溯错误的起源,就需要在前方的一定位置确保某个变量的值符合一定的条件。 比如VS有局部数组变量越界访问检查机制,如果函数中的数组被越界访问,在函数结束时会报错,但是原创 2016-11-30 21:30:07 · 2813 阅读 · 1 评论 -
单链表实现(C语言版,无头结点)
前言:单链表:它是一种链式储存的线性表,用一组地址任意的储存单元存放线性表的数据元素;称储存单元为一个结点;结点:值域+指针域 链表:二、代码实现(1)结点定义:typedef int DataType;typedef struct ListNode{ struct ListNode* next; DataType data;}Node,*PNode;typedef stru原创 2017-05-02 02:42:04 · 6447 阅读 · 0 评论 -
复杂链表的复制
一、复杂链表 (1)结点 值域+next域+radom随机域 (2)链表图示 二、复杂链表复制 (1)步骤 1)给原来的每个结点创建一个新结点,将其连接在原来结点之后 2)给新创建的结点连接random域 3)分割新结点和原结点 (2)图示 三、代码实现#include<stdio.h>#include<stdlib.h>typedef struct Comple原创 2017-05-04 01:20:47 · 451 阅读 · 0 评论 -
在c++程序中调用被C编译器编译后的函数,为什么要使用extern “C”
c/c++函数调用约定:c/c++函数调用约定 一、原题: 二、详细说明: 现在,在一个工程中;有一个test.c文件;一个test1.cpp文件;//test.c#include<stdio.h>int Add(int a,int b){ return a+b;}(1)使用extern int Add(int,int);声明外部函数—–错误 //test1.cpp#inc原创 2017-05-04 22:13:32 · 8186 阅读 · 0 评论 -
静态顺序表的实现(C语言版)
前言:学习数据结构的框架: 一、线性表 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。我们说“线性”和“非线性”,只在逻辑层次上讨原创 2017-04-27 21:18:21 · 3034 阅读 · 0 评论 -
标准IO与文件IO 的区别
作者:王姗姗,华清远见嵌入式学院讲师。1.先来了解下什么是标准IO以及文件IO。标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准IO库处理很多细节。例如缓存分配,以优化长度执行IO等。标准的IO提供了三种类型的缓存。(1)全缓存:当填满标准IO缓存后才进行实际的IO操作。 (2)行缓存:当输入或输出中遇到新行符时转载 2017-05-24 16:35:40 · 544 阅读 · 0 评论 -
模拟实现atoi(),字符串循环位移,8bit位指定位的置0或置1
1.实现一个8bit数据的指定位的置0或置1操作,其他位不变;#include#includevoid bit_set(unsigned char *p_data,unsigned char pos,int flag){ assert(p_data); assert(pos>=1&&pos if(flag==1)//置1 { *p_d原创 2016-05-30 16:29:33 · 544 阅读 · 0 评论 -
链表面试题(十二)---判断两个都不带环的链表是否相交
一、结构体定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-17 01:47:58 · 406 阅读 · 0 评论 -
链表面试题(一)---删除一个无头单链表的非尾结点
二、结点的定义typedef int DataType;typedef struct ListNode//定义结点{ DataType data; struct ListNode* next;}ListNode,*PListNode;typedef struct PList//定义一个成员是指向结点的指针的结构体{ PListNode PHead;}PList,*P原创 2017-05-16 22:45:37 · 374 阅读 · 0 评论 -
c语言变量的作用域,链接属性,储存类型&&static关键字
一、作用域:变量在程序的某个部分声明时,只能在程序的一定区域内才能访问,这个区域就成为作用域。 作用域分为四种: ①文件作用域②函数作用域③代码块作用域④原型作用域。 编译器通过变量声明的位置来确定作用域(1)文件作用域当变量在所有代码块之外声明时就在文件作用域中,文件作用域的范围是从变量声明处一直到文件的结束。但如果变量的声明在“.h”文件中,并且该“.h”文件被其他文件用#include原创 2017-05-16 19:39:15 · 397 阅读 · 0 评论