![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c
懒嘤嘤ly
嘴角扬起 用力呼吸
展开
-
模拟实现strcat函数
strcat函数原型:extern char *strncat(char *dest,char *src,int n); 用法:#include string.h 功能:把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的‘‘)并添加‘‘. 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。 以下是模拟实现原创 2017-07-10 17:25:03 · 397 阅读 · 0 评论 -
c语言复习之模拟实现strlen函数、strcpy函数、strncpy函数、strcat函数、strncat函数
复习的时候发现重要的模拟函数的实现还是有点生疏,今天我就来概括的复习一波~我们一个一个的来实现一遍1.模拟实现strlen其实非常简单哦~ strlen函数原型:size_t strlen ( const char * str ); 功能:计算字符串长度,不包括’\0’;模拟实现strlen函数int my_strlen(const char* arr){ int c原创 2018-01-16 11:45:38 · 548 阅读 · 0 评论 -
c语言复习之判断机器的大小端存储
一、什么是大小端存储模式呢? 这个问题呢就像吃egg一样,那么到底是从小头剥还是从大头剥呢?那我们就来分析一下再剥喽~ 所谓大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位保存在内存的高地址中; 小端模式则是指数据的高位存放在内存的高地址中,数据的低位则存放在内存的低地址中; 也许这样你还是有点迷糊,没关系,我刚开始也迷糊,总是记混,那么下面我们用图分析一下 二、那怎么用原创 2018-01-16 10:19:50 · 282 阅读 · 0 评论 -
函数栈帧创建与销毁那些事儿
程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。 函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(callstack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量就是所谓的保护现场。为了浅显易懂,直接抛代码看反汇编~int Add(in原创 2017-11-05 01:59:54 · 278 阅读 · 0 评论 -
c语言实现链表面试题
以前实现过链表的简单函数,详细见http://blog.csdn.net/dove1202ly/article/details/77168657 今天我们来看看链表涉及的面试题相信大家都知道单链表面试题的重要性,既然知道,我们就应该把思路捋清楚,然后多敲几遍多敲几遍多敲几遍(重要的事情说三遍),在我身边好多编程好的把这几个函数敲了不下十遍,而我太菜,这才是第一次下定决心把这个整...原创 2017-11-18 21:39:36 · 2808 阅读 · 0 评论 -
单链表的简单函数实现
首先我们得了解一下什么是链表?什么是单链表 所谓链表其实就是一些包含数据的独立数据结构(通常称为结点)的集合,链表中的每个结点通过链或指针连接在一起,程序通过指针访问链表中的结点。 在单链表中,每个结点包含一个指向链表下一个结点的指针,链表最后一个结点的指针字段的值为NULL。 下图为单链表的具体实现方式图 下面我们用代码来简单实现一下~ LinkList.h //函数声明#ifnd原创 2017-08-14 20:17:01 · 974 阅读 · 0 评论 -
解析选择排序法与冒泡排序法的区别(数组实现和指针实现)
为了更好的理解两种方法的区别,我们分别用图解法和代码实现来区分一下~ 例如有一组数据arr[5]={9,5,7,3,0},分别用两种方法对其进行排序选择排序法图解说明 如图,数组arr有5个数,需要比较4次,如果按照从小到大排序的话;第一次比较:将数组的第一个元素与数组中从第二个数组以后的每个元素进行比较,找到最小的元素记录下来,再进行第二次比较;第二次比较,将数组中arr[1]与后面的每个元素原创 2017-08-19 20:14:28 · 4514 阅读 · 3 评论 -
动态顺序表-c语言实现
上一篇实现了顺序表的静态实现,那么有没有一种更为优化的实现方式呢? 当然有,仿照之前实现的通讯录,接下来我们来实现一下动态的顺序表~SeqListD.h#ifndef __SEQLISTD_H__#define __SEQLISTD_H__#include <stdio.h>#include <assert.h>#include <string.h>#include <stdlib.原创 2017-07-28 16:28:06 · 269 阅读 · 0 评论 -
静态顺序表-c语言实现
要实现顺序表,那么首先我们得知道什么是顺序表,顺序表有什么作用等等。。。。 将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。 采用顺序存储结构的线性表简称为“顺序表”。顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过上一个位置确定。 下面我们来具体实现一下。。。。SeqListD.h //函数声明#ifndef __SEQLIST_H__原创 2017-07-28 16:15:49 · 259 阅读 · 0 评论 -
动态通讯录
上次实现了静态版本的通讯录,虽然能够初步满足我们的需求,但总归还是不够完美,那么下面我将次通讯录的静态版本改为动态版本。。。这就需要用到动态分配~所谓动态分配,就是需要的时候再分配,这是相对于静态分配而言的,静态分配就是一次分配完毕,不管你用多少。而动态分配则是按需分配。下面我们来具体实现一下呗~ contact.h#ifndef __CONTACT_H__#define __CONTACT原创 2017-07-26 16:43:16 · 829 阅读 · 2 评论 -
通讯录(文件版本)
首先,我们来了解一下有关文件操作的相关函数~ fopen函数: 打开文件 FILE* fopen(const char *filename,const char *mode) 参数filename即欲打开的文件名或者文件路径,参数mode则代表流形态 那么mode有哪些形态呢??? r 打开只读文件,该文件必须存在 r+ 打开可读写的文件,该文件必须存在 w原创 2017-08-01 14:25:37 · 1159 阅读 · 0 评论 -
浅谈c语言—位段
关于结构,我们有必要提到它们实现位段的能力,下面我们就来就位段来讨论一下呗~一、位段的声明于结构的声明的不同:首先先看一下下面这个位段声明的例子struct CHAR{ unsigned ch : 7; unsigned font : 6; unsigned size : 19;}原创 2017-07-16 12:58:01 · 413 阅读 · 0 评论 -
注释转换(C注释风格-C++注释风格)
注释一般来讲有分为两种: 一是单行注释:直接在该行需要注释的地方加上”//”就行 如:// int a=0; int b=0; //定义一个变量 另外还有一种是多行同时注释(不能嵌套使用): 如:/* int a,b; int c,d; */ 其中”/“和”/”起限定范围的作用,该范围内的语句都会被注释掉,将不再起作用。 当然以上多行注释也是可以用来单行注释的 /原创 2017-07-30 12:31:01 · 2952 阅读 · 0 评论 -
静态通讯录
实现一个简单的静态通讯录可以用来存储有限个人的信息其中每个人的信息包括:姓名、性别、年龄、电话、住址 具体实现成员的添加、删除、查找、修改、显示、清空、排序等功能根据要求,分别创建三个文件(contact.h<头文件>,contact.c<具体函数实现>,test.c<函数测试>)contact.h#ifndef __CONTACT_H__#define __CONTACT_H__#define原创 2017-07-20 14:19:38 · 341 阅读 · 0 评论 -
结构体基础知识
1.首先我们来认识一下什么是结构体~ 其实,结构体就是一些值的集合。我们把这些值称为它的成员,一个结构体的各个成员可能具有不同的类型。 结构体的形式如下: 第一种:只有结构体定义 struct 结构名 { 成员表列 }; 例如:struct Stu{ char name[20]; int age; char id[15]; };123456123原创 2017-07-10 17:19:58 · 532 阅读 · 0 评论 -
一个函数可以求任意多个整数的平均值(使用可变参数列表)
那么,什么是可变参数列表呢?一般我们写的函数的参数列表都是固定的,那么,如果一个函数在不同的时候接受不同数目的参数到底可不可以实现呢?假如要写一个函数(求任意多个整数的平均值),参数列表不确定时,我们用平时的固定的参数列表是存在很多隐患的,所以,就有了stdarg宏---->可变参数列表是通过他来实现的,头文件stdarg.h,他是标准库的一部分,这个头文件声明了一个类型va_list和三个...原创 2018-03-13 15:46:23 · 4180 阅读 · 0 评论