c语言
wwwwangjing
这个作者很懒,什么都没留下…
展开
-
和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
strlen 函数原型: size_t strlen(const char* string); 功能: 计算字符串长度,遇到‘/0’停下;define _CRT_SECURE_NO_WARNINGS 1includeincludeinclude原创 2017-05-18 17:26:35 · 814 阅读 · 0 评论 -
static关键字的作用
在C语言中; 1.static修饰局部变量,被static修饰的局部变量只执行一次,生命周期被改变了,随整个程序,储存位置在静态常量区,初始化的时候自动被初始化为0,但是作用域被没有发生改变。#include <stdio.h> void test(){ static int num = 0; num++; printf("%d\n", num);}int原创 2017-08-25 13:35:24 · 353 阅读 · 0 评论 -
assert是函数吗,它在调试版本下和发布版本下有什么不同
1.assert是宏,不是函数。他被包含在asset.h的头文件中。 2.assert 只在debug版本下有作用,在debug版本下,在预处理器处理时完全被替换,如果assert()括号里面的内容为假,就会报错,程序停止运行。但是在release版本下没有任何作用,完全被优化,没有任何接口。他的作用就是在调试阶段把错误排除掉。原创 2017-08-14 16:49:37 · 721 阅读 · 0 评论 -
程序是如何编译执行的,背后都发生了什么
一个程序从源文件test.c到可执行程序test.o,一共经历了以下步骤: 这是一个源程序到可执行程序所经历的过程,但是这每个小阶段,编译器都做了些什么呢? 1.预处理器处理: 1).头文件的包含,预处理指令#include用于处理头文件的包含,头文件有两种形式,< xxx>和“xxx”,#include< xxx>所包含的头文件,是告诉编译器,该头文件所包含的内容从系统中去查找,#原创 2017-08-14 12:04:04 · 536 阅读 · 0 评论 -
怎样防止头文件被重复引用
方式一:条件编译:#ifndef #define......//一些声明语句 #endif这种方式依赖于宏名称不能冲突,而且这种方式可以保证同一个文件不被包含多次,也能保证内容完全相同的两个文件不会不小心同时包含。但是,如果宏名称相同,就会明明你包含了头文件,却找不到源文件。条件编译的有点事,跨平台效果好。 例://file1h#define __BOOK_H_现在有另外一个file2.bo原创 2017-08-19 22:45:20 · 452 阅读 · 0 评论 -
volatile关键字的作用
volatile本来的意思就是可变的,易变的,作为C语言关键字,是告诉编译器,他后面定义的变量随时都会改变,因此编译后面的程序每次需要存储或者读取这个变量的时候,都需要直接从变量地址中读取数据。如果没有volatile这个关键字修饰,编译器可能优化读取或存储,可能暂时使用暂存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的情况。原创 2017-08-17 16:10:53 · 123 阅读 · 0 评论 -
【简易通讯录】-----C语言实现
【简易通讯录】—–C语言实现 该通讯录实现了一个普通通讯录所具有的基本功能:联系人的添加,删除,修改,排序,查找,清空等功能。使用了结构体自定义类型实现,排序部分使用了冒泡排序。 头文件部分:#ifndef __CONTACTS_H_#define __CONTACTS_H_#include<stdio.h>#include<stdlib.h>#include<string.h>原创 2017-07-11 18:53:55 · 500 阅读 · 0 评论 -
二分查找
二分查找又叫折半查找,优点是比较次数少,查找速度快,平均性能好;缺点为要求待查表为有序表,且插入删除删除困难。因此,折半查找适用于不经常变动而查找频繁的有序列表。二分查找的实现原理是: 先假设表中元素是按升序排列,将表中间位置的关键字与需要查找的目标关键字进行比较,如果相等,则查找成功;否则,利用中间位置的关键字将表分成前,后两个子表,如果中间位置的关键字比目标关键字小,则进一步查找下一个后-子表,原创 2017-05-22 12:39:40 · 239 阅读 · 0 评论 -
关于sizeof 和strlen 的计算的知识总结
define _CRT_SECURE_NO_WARNINGS 1includeincludeincludeinclude原创 2017-05-18 16:41:20 · 359 阅读 · 0 评论 -
把一个字符串左旋k个字符的2种方法
第一种是一个字符一个字符的左移,把第一个字符存临时变量里面,把后面的字符每一个往前移动一个位置,‘\0’不移动,然后把临时变量的值放在‘\0’前面的位置。这样重复k次; 第二种是把需要左移的k个字符逆序,再把剩下的字符逆序,最后再把整体逆序,就得到我们想要的结果了。 第一种方法的实现:#include<stdio.h>#include<stdlib.h>#include<string.h>v原创 2017-05-27 16:13:24 · 339 阅读 · 0 评论 -
二分查找
二分查找又叫折半查找,优点是比较次数少,查找速度快,平均性能好;缺点为要求待查表为有序表,且插入删除删除困难。因此,折半查找适用于不经常变动而查找频繁的有序列表。二分查找的实现原理是: 先假设表中元素是按升序排列,将表中间位置的关键字与需要查找的目标关键字进行比较,如果相等,则查找成功;否则,利用中间位置的关键字将表分成前,后两个子表,如果中间位置的关键字比目标关键字小,则进一步查找下一个后-子表原创 2017-04-18 17:56:23 · 285 阅读 · 0 评论 -
main函数参数的解析及应用
我们平时在使用main函数的时候是很少注意main函数的参数,但实际上main函数是有参数的,main函数是由系统调用,在调用的同时传参。 main函数的参数原型:int main(int argc,char*argv[],char*envp[])argc 是 argument count的缩写,表示传入main函数的参数个数,包含第一个参数; argv是argument vector的缩写,首原创 2017-05-24 19:11:27 · 819 阅读 · 0 评论 -
从最简单的add函数调用过程分析函数栈桢创建和销毁的过程
这是一个简单的add()函数,我们可以很直接的看出它的调用过程和运行结果;但是对于机器来说,要怎样来执行这个程序呢,这个过程又是怎样的呢。 在编译器(vs2013)中运行这个程序,我们可以从生成的汇编代码来逐步分析这个函数运行的过程;截取部分反汇编,我们来进行逐句分析。 在main函数之前,系统会用—mainCRStartup 来调用main函数,所以main函数的调用过程为: 1:e原创 2017-05-21 13:31:30 · 1613 阅读 · 0 评论 -
memcpy和memmove的模拟实现
momcpy 函数原型: void * momcpy (void*dest, const void*str, size_t count); 功能 :由str所指向内存区域复制count个字节到dest所指向的内存区域。 缺点:str所指向的内存区域和destiny所指向的内存区域不可重叠。 mommove 函数原型: void * mommove (void*dest, const voi原创 2017-05-18 16:57:30 · 2458 阅读 · 0 评论 -
sizeof是函数吗,具体使用方法
1.sizeof是运算符,不是函数; 2.sizeof不能求void类型的长度,void本来申明的就是一个空类型,自己都不知道自己的类型有多大;但是sizeof可以求得void指针的大小; int a = 10; void* p = &a; printf(“%d\n”,sizeof(p)); 输出的结果为4 3.sizeof求一个指针的大小,不管指针原创 2017-08-26 20:58:27 · 3454 阅读 · 0 评论