
C语言
文章平均质量分 76
NICOC_
路曼曼其修远兮,吾将上下而求索。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
宏和函数的区别以及宏的一些简单用法介绍
宏和函数的区别宏的定义:#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro),或者定义宏(define macro)。函数:它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。每次使用时只需要调用即可———————————————————————————————————————————————————————————原创 2017-04-11 14:07:11 · 1425 阅读 · 0 评论 -
函数指针数组指针……%¥#* 的各种结合
浅谈:指针数组数组指针函数指针函数指针数组指向函数指针数组的指针1.指针数组:char* arr[5]首先,它是一个数组,一个可以存放5个指针的数组.里面每个元素存的是指向字符/字符串的指针。声明:char*(arr[i]),因为[]的优先级高于*。所以 char* arr[i],也可以 但是我觉得(char*)arr[i]不行,因为C语言原创 2017-05-08 14:11:18 · 577 阅读 · 0 评论 -
实现简易通讯录3.0 文件流
之前两个版本分别是 简易通讯录的静态实现:(点我进入)简易通讯录的动态实现(动态开辟空间):(点我进入)但是之前两个版本很明显的缺陷就是 每次退出通讯录后 之前输入的数据都被删除了,所以3.0版本实现的是用一个文件保存之前输入的数据,再次进入通讯录时就可以加载之前的东西啦。这次试用到的是fread,fwrite,fclose函数简单介绍一下这三个函数的使用方法:fread:原创 2017-05-27 09:21:39 · 650 阅读 · 0 评论 -
C/C++的注释转换
C/C++的注释风格有两种,一种是“/*xxxxxxx*/ ”,这种注释可以注释行也可注释段 第二种是“//”,这种注释只能注释行目标要实现将所有/* xx*/注释风格变成//注释风格思路:使用有限状态机编程可能会出现的情况// 1.一般情况int num = 0;/* int i = 0; */// 2.换行问题/* int i = 0; */int j = 0原创 2017-05-28 10:50:06 · 862 阅读 · 0 评论 -
动态顺序表部分接口的简易实现
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。代码目标:实现部分接口函数代码:头文件部分:#ifndef __SEQLIST_H__#define __SEQLIST_H__#define _CRT_SEC原创 2017-05-29 18:40:35 · 538 阅读 · 0 评论 -
大小端介绍
端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian(这句话最为形象)。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big E转载 2017-05-30 09:48:38 · 516 阅读 · 0 评论 -
C语言条件编译及编译预处理阶段
转自:http://www.cnblogs.com/rusty/archive/2011/03/27/1996806.html一、C语言由源代码生成的各阶段如下:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是转载 2017-05-30 10:03:50 · 649 阅读 · 0 评论 -
C程序编译过程浅析
转自:http://blog.youkuaiyun.com/koudaidai/article/details/8092647点击打开链接代码如下:#include int main(){ printf("hello world\n"); return 0;}通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out其实编译(包括链转载 2017-05-30 10:42:59 · 469 阅读 · 0 评论 -
旋转字符串
此文章参考《程序员编程艺术》第一章题目描述:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数,要求对长度为n 的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。思路1:暴力翻转法初看此题,咱们最先想到的笨方法可能就是一位一位移动,故咱们写一个函数叫做l转载 2017-06-05 17:36:34 · 856 阅读 · 0 评论 -
单链表的简单实现
单链表:链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置)头文件.结构的定义和 简单函数实现的声明#pragma once#include #include #include typedef int DataType;typedef stru原创 2017-06-09 18:10:29 · 759 阅读 · 0 评论 -
动态内存开辟malloc,calloc,realloc简述
1.提到动态内存开辟就要想到内存分配的堆区,静态区,堆区,栈区介绍和区别详情(点击这里)2.动态内存开辟是内申请一定的内存,C语言中与申请内存有关的函数有malloc,calloc,realloc,free,alloca等函数(1).mallocmalloc的函数申明:void* malloc(unsigned size);作用:在内存的动态存储区中分配一块长度为size字原创 2017-05-15 10:31:11 · 758 阅读 · 0 评论 -
将结构体实现的简易通讯录改成动态的版本
之前实现的一次结构体型通讯录电话本容量固定为1000,如果只需存50人,就浪费950的容量,如果存2000人,容量就不够了,所以这次动态开辟一个电话本容量。并且将之前的版本测试部分用函数指针数组简化完善一下。之前版本(点击这里) 代码如下:1.头文件部分:#ifndef __CONTACTS_H__#define __CONTACTS_H__#define _CRT_S原创 2017-05-15 09:33:01 · 985 阅读 · 0 评论 -
条件编译和常用预处理标识符的简单介绍
条件编译:一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。比如调试用的代码,删之可惜,用之傻*,所以选择条件编译例:#include #define __DEBUG__int main(){ int i = 0; int arr[5] =原创 2017-04-11 14:52:18 · 1302 阅读 · 0 评论 -
使用宏将数字的二进制奇数位偶数位交换
问题:将奇数位和偶数位交换。思路:将其第0位和第1位交换,第2位和第3位交换,以此类推。我们将用0x55555555(01010101010101010101010101010101)和X与运算,就能求得X的奇数位,再左移1,就能将奇数位变为偶数位。同理,用0xAAAAAAAA(10101010101010101010101010101010)和X与运算,就能得到X的偶数位,再右移1,原创 2017-04-12 08:37:03 · 653 阅读 · 0 评论 -
超级小游戏:三子棋
介绍一下游戏规则:在3*3的游戏棋盘内,玩家与电脑激战,电脑先手(笨鸟先飞,因为设计的是电脑随机落子),回合制落子,直到一方三子连珠,或者棋盘满了(平局)为止。游戏代码设计逻辑:此次由game.h(头文件引用和函数的声明)、game.c(函数的实现)、test.c(游戏测试)组成。电脑落子后,玩家落子,检查电脑和玩家落子是否正确,然后在棋盘中打印出落子,检查是否一方胜利或者平局。———原创 2017-04-04 16:56:09 · 626 阅读 · 0 评论 -
有关数组的运算z
关于数组的一些运算:我们先看看运算符sizeof和函数strlen函数的作用定义和用法。sizeof:sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为: The sizeof keyword gives the amount of storage, in bytes, associated wi原创 2017-04-03 08:19:59 · 450 阅读 · 0 评论 -
冒泡排序,Bubble_rank
冒泡排序简述:就是将一串无序的数字按照自己规定的升序或者降序排列成有序的数列。如图:代码原理很简单,就是每次将第一个数和后面依次比较,直到冒泡完成。代码如下:#include void Bubble_rank(int arr[],int sz){ int i = 0; int k = 0; for(i=0; i<sz-1; i++) { for(k=0;原创 2017-04-05 07:54:46 · 588 阅读 · 0 评论 -
C语言位运算符异或^的简单介绍
异或:位运算符,"异或"顾名思义就是两数相"异",则为真(1)。简单的描述其作用就是0^1=1,0^0=0,1^1=0。参加运算的两个二进制位为同号,则结果为0,异号则为1.______________________________________________________________________________________________异或的特性及应用:1.使特原创 2017-04-14 09:08:54 · 11595 阅读 · 1 评论 -
函数的调用过程,栈帧的创建和销毁
我在通过调试时,看反汇编上的步骤来分析函数的调用过程,栈帧的创建和销毁。转到反汇编时,看到各种没见过的标识符,一脸蒙蔽,所以我们先了解这些标识符都是干嘛的。esp:esp寄存器里存储的是在调用函数之后,栈的栈顶。并且始终指向栈顶。ebp:ebp寄存器里存储的是是栈的栈底指针,通常叫栈基址,这个是一开始进行函数调用之前,由esp传递给ebp的。(在函数调用前你可以这么理解:esp存储的是原创 2017-04-17 10:52:38 · 1289 阅读 · 0 评论 -
函数可变参数列简单用法
可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等。#include #include int average(int n,...){ int ret = 0; int sum = 0; int i = 0; va_list arg; //初始化arg为char类型指针 va_start(arg原创 2017-05-03 08:30:37 · 471 阅读 · 0 评论 -
利用结构体实现建议通讯录
实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人思路:将此次函数实现分为3个模块,1.头文件部分。2.函数实现部分。3.原创 2017-05-13 17:00:02 · 944 阅读 · 0 评论 -
C语言实现单链表-面试题(基础篇)
单链表的实现(点击打开链接)单链表简易实现后有如下面试题1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 2.从尾到头打印单链表 3.删除一个无头单链表的非尾节点 4.在无头单链表的一个节点前插入一个节点 5.单链表实现约瑟夫环 6.逆置/反转单链表 7.单链表排序(冒泡排序&快速排序) 8.合并两个有序链表,合并后依然有序 9.查找单链表的中间原创 2017-06-09 18:33:46 · 931 阅读 · 0 评论