
c语言
文章平均质量分 59
audience_fzn
这个作者很懒,什么都没留下…
展开
-
模拟实现mymcpy,memmove,strncpy
memcpy函数实现memcpy: 内存拷贝函数 void *memcpy(void *dest ,const void *scr,size_t n); 从src所指向的内存地址的起始位置开始拷n个字节到目标dest所指的内存地址的起始位置中 。返回dest的指针。头文件#include1.src和dest所指的内存区域可能重叠,但是如果src和dest所指的内存区域重叠,那么这个函数原创 2017-08-07 13:39:32 · 424 阅读 · 0 评论 -
递归函数,可变参数列表
递归1.什么是递归?递归就是函数或过程在其定义或声明的中有直接或间接调用自身的一种方式。他通常将一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。2.递归的主要思想:大事化小求第n个斐波那契数(不考虑溢出)int fib(int n){ if (n <= 2) return 1; return fib(n-1) + fib(n - 2);}...原创 2018-08-04 11:57:33 · 746 阅读 · 0 评论 -
memcpy,memmove的实现
1.memcpy()的实现内存拷贝函数,指定拷贝count个字节,与类型无关。memcpy按字节拷贝,并不是只能拷贝字符串,所以没有‘\0’结束标志,按指定是字节数大小拷贝str家族函数只能处理字符串类型的数据,而mem可以处理任意类型的数据void* my_memcpy(void * dest, void * src, size_t count){ assert(dest)...原创 2018-08-04 12:10:02 · 227 阅读 · 0 评论 -
c语言指针详解
1.什么是指针?指针是一个变量,用来存放地址,存放在指针中的值都被当成地址来处理2.为什么存在指针?从内存说起,计算机中的程序要运行起来首先要将程序加载到内存,那如何合理的分配时使用内存呢?我们将内存分成多个小的单元,每个单元都对应一个独一无二的地址,这样就一个地址标识一块空间经过仔细的计算和权衡我们定义每个小的单元是一个字节,对于32位机器,有32根地址线,那么假设没很地址线...原创 2018-08-04 13:06:35 · 246 阅读 · 0 评论 -
数组指针,指针数组
1.指针数组:指针数组是一个数组,但数组内的每一个元素都是一个指针int *arr[10]char *arr2[4];2.数组指针:数组指针式一个指针,指针有能力指向一个数组int (*p)[10];3.我们如何区别数组指针和指针数组呢?int *a[10]; //指针数组int (*a)[10]; //数组指针注:我们的变量名先和那个运算符集合就是什么...原创 2018-08-04 13:25:34 · 188 阅读 · 0 评论 -
malloc,calloc,realloc及动态开辟内存常见错误
1.为什么存在动态内存管理?我们已经掌握的内存开辟方式有:int val = 20;//在栈空间上开辟四个字节char arr[10] = {0}; //在栈空间上开辟10个字节的连续空间但是这些开辟空间的方式开辟的空间大小是固定的,数组在声明的时候,也是必须指定大小。他们所需要的内存在编译时分配而有些时候我们需要的空间大小在程序运行的时候才能知道,所以就要有一种动态内存分配的...原创 2018-08-04 16:46:48 · 2987 阅读 · 0 评论 -
结构体,枚举,联合
一、结构体:1.结果体是一些值的集合,这些值称为成员变量。结果的每个成员可以是不同类型的变量,可以是数组,指针,甚至其他结构体2.结构体的声明:struct Stu{ char name[20]; int age; char sex[5];};3.特殊的声明:不完全声明struct{ int a; ch...原创 2018-08-04 19:26:27 · 301 阅读 · 0 评论 -
函数栈帧(调用过程)
函数栈帧就是在调用函数是为其在栈空间上开辟了一段空间,指向过程调用,一个过程调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。栈是向下生长的,从高地址到低地址延伸的 每个函数的每次调用的过程,都有它自己独立的一个栈帧结构,用于变量的保存,现场的保护 要维护这个栈帧必须使用ebp(栈底指针)和esp(栈顶指针)这俩个寄存器 cpu如何知道函数运行到哪里——寄存器...原创 2018-08-05 11:20:51 · 578 阅读 · 0 评论 -
c语言关于数组的简单运算
我们可以通过数组名+整数的运算,获取到数组每一个元素的地址int arr[10] = { 0 };int i = 0;for (i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i){ printf("&arr[%d] = %p\n", i, &arr[i]); printf("%p\n", arr + i);...原创 2018-08-02 21:54:42 · 7749 阅读 · 0 评论 -
c语言程序环境
程序的编译环境和执行环境翻译环境:在这个环境中,源代码被转换成可执行的机器指令 执行环境:它用于实际执行代码这俩种环境不必在同一台机器上翻译环境:组成一个程序的每一个源文件通过编译过程转换成目标代码 每个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序 链接器同时也会引入标准c函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接...原创 2018-08-02 21:57:05 · 1113 阅读 · 0 评论 -
c语言基础知识
一、常量变量1.常见的一些数据类型int 4字节,short 2字节,long 4字节(跟平台有关,可能是4,也可能是8),longlong 8字节, char 1字节,float 4字节,double 8字节2.字符串是由双引号引起来的一串字符,以/0作为结束标志。‘/0’不是字符串的内容,只是一个结束标志,所以strlen时不会求‘\0’的长度char arr[] = ...原创 2018-08-02 22:28:05 · 27661 阅读 · 0 评论 -
C语言宏和函数浅析
预定义符号:__FILE__:进行编译的源文件__LINE__:文件当前行号__DATE__:文件被编译的日期__TIME__:文件被编译的时间define:#define定义标识符:#define MAX 1000;1.如果定义的内容太长,可以分成几行,但是每一行后面都要加上一个/(续行符)2.define定义标识符的时候最好不要在后面加上;这样容易导致问题...原创 2018-08-02 23:26:27 · 611 阅读 · 0 评论 -
字符串相关函数的实现
1.strlen():求字符串长度函数,遇到'\0'结束函数原型:size_t strlen(const char * str)参数指向的字符串必须以‘\0’结尾返回值size_t是无符号的1)使用一个计数器int my_strlen(const char* str){ int count=0; while (*str) { str++; count++; ...原创 2018-08-03 22:58:42 · 318 阅读 · 0 评论 -
头文件包含方式,main函数的参数解析
条件编译:在编译一个程序的时候我们如果要将一条(一组)语句编译或放弃是很方便的因为我们有条件编译比如调试性的代码,删除可惜,保留又碍事,我们就可以选择条件编译常见的条件编译语句:1.#if 常量表达式//……#endif//常量表达式由处理器求值,因为变量在运行事才会创建,而这些条件编译在预处理阶段 2.多分支的条件编译#if 常量表达式//……#...原创 2018-08-03 20:34:19 · 1297 阅读 · 0 评论 -
C程序内存的分配,const ,volatile,static
一个c/c++程序占用的内存分别位以下几个部分1.栈区:由编译器自动分配释放,储存为函数而分配的局部变量,函数参数,返回数据,返回地址等,其操作方式类似于数据结构里的栈2.堆区:一般由程序员手动分配释放,若程序员不释放程序结束时可能由OS回收。3.全局区(静态区):由于存放全局变量,静态变量常量,程序结束后由系统释放4.常量区:用于存储常量字符串5代码区:用于存放函数体(类成员...原创 2018-08-03 19:53:49 · 460 阅读 · 0 评论 -
指针数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针
1> 指针数组:int *arr[10]; 它是一个数组,数组的每个元素都是指针,数组占多少个字节有数组本身决定。([]的优先级高于*,所以arr先于[]构成数组,数组类型为int *)2>数组指针:int (*arr)[10]=&array;它是一个指针,指针指向的数组有10个元素,它在32系统下永远占4个字节。(()的优先级高于[],所以它是一个指针)3>函数指针:指向原创 2017-08-09 19:36:21 · 262 阅读 · 0 评论 -
动态顺序表
动态顺序表Capacity 指的是顺序表的容量,并不是实际存储的有效数据size 当前顺序表的有效数据个数 头文件SeqList.h#ifndef __SEQLIST_H__#define __SEQLIST_H__#endif __SEQLIST_H__#include#include#include#include#pragma war原创 2017-08-06 18:11:04 · 200 阅读 · 0 评论 -
模拟实现strcpy,strcmp,strcat,strstr.strlen
strcpy函数实现strcpy :字符串拷贝函数, 函数原型 char* strcpy(char* dest,char* src) 从stc的起始地址开始,到'\0'结束。 所以dest必须有足够的空间来容纳src。头文件#includechar* my_strcpy(char* dest, const char* src){ assert(dest); asser原创 2017-08-06 20:55:10 · 360 阅读 · 0 评论 -
静态顺序表
顺序表是指用一段地址连续的存储单元依次存储数据元素的线性结构,在计算机中以数组的形式保存。顺序表有静态存储和动态存储俩种方式。//顺序表的静态存储SeqList.h#ifndef __SEQLIPST_H__#define __SEQLIPST_H__#include#include#include#include#pragma warning(disable原创 2017-08-06 18:04:47 · 255 阅读 · 0 评论 -
c语言 不允许创建临时变量,交换俩个数的内容(3种方法)
给定俩个变量的值,将俩个值的内容进行交换。加入我们要把装咖啡和牛奶的杯子交换一下,我们可能要用一个空的容器,将咖啡倒在新杯子里,把牛奶倒在装咖啡的杯子里,再把咖啡倒在装牛奶的杯子里。#includeint main(){ int a = 10; int b = 20; int tmp = 0; tmp = a; a = b; b = tmp;原创 2016-09-21 16:22:04 · 1265 阅读 · 0 评论 -
c语言 求1000到2000之间的闰年
闰年,1.输入一个年份能被四整除,但不能被100整除(这俩个条件要同时满足,与的关系) 2.输入一个年份能被四百整除。(1与2是或的关系)所以我们可以写为#includeint main(){ int year; for(year=1000; year<=2000; year++) { if(year%4==原创 2016-09-21 15:27:14 · 1253 阅读 · 0 评论 -
c语言入门 输出乘法口诀表
乘法口诀表1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9.......#includeint main(){ int i = 0; for (i=1; i<=9; i++) { int j = 0 for (j=1; j<=i; j++) {原创 2016-09-20 21:29:31 · 583 阅读 · 0 评论 -
c语言,求100~200之间的素数的2种方法
素数,除了1 和它本身不能被其他数整除的数。要求100~200之间需要用到循环,第一种方法#includeint main(){ int i = 0; for (i=100; i<=200; i++) { int j = 0; for (j=2; j<=i-1; j++) { if (原创 2016-09-20 21:22:11 · 24325 阅读 · 1 评论 -
通讯录动态实现
变量的存储可分为静态和动态俩种方式,静态存储:指在程序运行期间分配固定的存储空间,即在定义时就分定存储单元,并一直保持不变,直至程序结束。(全局变量)动态存储:在程序执行过程中才分配存储单元, 使用完毕就立即释放。(形参)contact.h#ifndef __CONTACT_H__#define __CONTACT_H__#pragma warning(disable:4996)原创 2017-08-07 12:25:25 · 439 阅读 · 0 评论 -
内存对齐(struct ,calss)、位段
一、内存对齐:编译器将程序(class ,struct,union)中的每个数据(成员变量)安排在适当的位置上。许多编译器对数据在内存中的存放顺序是有限制的,他们要求这些数据的首地址必须是某个数的整数倍(通常为4/8)二、为什么要内存对齐?1.平台原因不是所有硬件平台都可以访问任意地址上的任意数据,某些平台只能在某些地址处取一些特定的数据,否则会抛出硬件异常(编址并不是对所有的内存进行编址,所以有...原创 2018-05-24 20:49:24 · 638 阅读 · 0 评论 -
大小端存储模式
什么是大小端?大端(存储)模式:是指数据的低位保存在内存的高地址,而数据的高位,保存在内存的低地址中小端(存储)模式:数据的地位保存在内存的低地址,而数据的高位,保存在内存的高地址为什么要有大小端?因为在计算机系统中,我们是以字节为单位的 ,每个地址单元都对应着一个字节,一个字节为8bit。但是在c语言内,处理8bit的char。还有16bit的short,32为的int。...原创 2018-08-03 10:53:22 · 917 阅读 · 0 评论