[C] 内存中类型的存储典例详解
小引 我们前面学习了数据在内存中的存储,包括整型,浮点数等等数据类型。 这里我们简单举几个例子,通过这些典例的讲解,希望可以对内存有一个更客观、更深刻的理解。 典例 1: #include <stdio.h>
int main()
{
char a= -1;
signed char b=-1;
unsigned char c=-1;
printf("a=%d,b=%d,c=%d",a,b,c);
return 0;
}
%d为有符号的十进制的整数,虽然
[Linux]进度条代码
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main(){
int i = 0;
char bar[102];
memset(bar,0,sizeof(bar));
c
[C]项目--通讯录
通讯录 【功能模块】 1. 新增联系人 2. 删除联系人 3. 修改联系人 4. 查询联系人 5. 显示所有联系人 6. 清空所有联系人 【函数主体】 【功能测试】 楔子: 我们日常使用的手机,无论大小,应该都具备通讯录这个实用的功能。仔细想想其实它的实现原理其实也很简单,那么本篇博客就按照逻辑来实现一下一个简单的通讯录系统。 通讯录可以抽象成为一下几个模块: 管理很多联系人 每个联系人的信息:姓名 + 电话 (为主) 增删改查的功能 和用户通过控制台进行交互 以下为程序主体: 【功能模块】
[C] 数组指针、指针数组及数组传参
指针 字符指针 数组指针 指针数组 一维数组传参 1. 整型数组 2. 指针数组 二维数组传参 一级指针传参 二级指针传参 小引 在指针的学习阶段,有不少同学都十分畏惧这个物什,甚至“谈指针色变”。其实对指针的不理解,其实本质上是对内存的不理解,本篇博客就从零开始、系统的来讲解指针这个话题。 首先我们应该明确以下的一些基础常识: 指针是一个变量,用来存放地址,地址唯一标识一块内存地址。 指针的大小是固定的4 或 8个字节。(32或64位平台) 指针是有类型的,指针的类型决定了指针加减整数运算的
[C] 什么是函数指针
指针 函数指针 函数指针数组 回调函数 函数指针 函数指针是围绕指针相关内容中举足轻重的一个话题。使用函数就要被加载到内存中,所以就会在内存中占有地址,所以就出现了函数指针。 函数指针是指向函数的指针变量。 因此“函数指针”本身应是指针变量,该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。 C语言在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样
[C] 字符串库函数 及模拟实现
字符串库函数 字符串长度比较函数: strlen 长度不受限制的字符串函数: strcpy strcat strcmp 长度受限制的字符串函数: strncpy strncat strncmp strerror C语言中的函数分为两个大类: 库函数 库函数中又分为:标准库 / 第三方库 自定制函数 在本篇博客中,我们就深入函数基理,解剖函数功能。运用基本代码模拟实现各个函数,这样就便于调试代码,客观的看看函数是如何实现和运作的。 字符串长度比较函数: strlen [strlen的官方文档]:
[C] 内存操作函数 与 字符处理函数
目录 字符处理函数 内存操作函数 memcpy memmove memcmp 字符处理函数 函数 参数为真条件 iscntrl 任何控制字符 isspace 空白字符(包括空格' ',换页'\f',回车'\r',换行'\n',制表符'\t'/'\v') isdigit 十进制数字0~9 isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F islower 小写字母a~z isupper 大写字母A~Z isalpha 字母a~z或A~Z isalnum 字母或者数
[C] 自定义类型专项(结构体、联合体、枚举)
自定义类型 结构体 结构体类型的声明 结构的自引用 结构体变量初始化 结构体内存对齐 结构体传参 位段 枚举 联合体 结构体 结构体(struct)是由一系列具有相同类型、或不同类型的结构体成员构成的数据集合。 结构体类型的声明 struct tag{
member-list;
}variable-list;
要使用结构体,struct关键字一定不能省,除非通过重定义类型typedef可以做到省略。 tag意为结构体标签,是不同结构体个性化的一个标志,一般结构体都会使用。后面会讲到一种匿名
[C] 动态内存管理
目录 为何存在内存管理 动态内存函数 malloc free calloc realloc 常见错误 C/C++程序的内存开辟 柔性数组 使用 特点 动态内存管理是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。 动态内存管理不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。 C/C++定义了4个内存区间: 代码区 全局变量与静态变量区 局部变量区,即栈区 动态存储区,即堆(heap)区或自由存储区(free
IntelliJ IDEA 最新版本和IntelliJ IDEA 2017.1版本 下载
写下这篇文章,以此来告诫自己,尝试最新版本需谨慎谨慎再谨慎呀! IntelliJ IDEA不仅仅是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 除此之外,用来做大数据的所有语言都可以在这里以超高的效率进行开发。当然,不同的开发语言需要的包和插件都不一样,只需要在IDEA装上
IDEA 使用方法总结
使用方法:IntelliJ IDEA使用教程(很全) 导入主题:idea导入主题的方法 Win 10 系统安装Scala :Win10 上 Scala 安装 使用 IDEA 配置 Maven :使用 IDEA 配置 maven (入门) Debug :在IDEA中使用Debug Intellij IDEA 16 通过GUI Form 创建图形界面的方法( JAVA ):Intellij IDEA 16 通过GUI Form 创建图形界面的方法( JAVA )
顺序表(SeqList) Java实现
实现的操作包括: 向顺序表末尾添加数据 ( addData( Data)); 向顺序表指定位置添加数据( insertDataByLoc( Location)); 删除顺序表中指定的数据( deleteDataByData( Data)); 删除顺序表中指定位置的数据( deleteDataByLoc( Location)); 查找指定位置的数据( findDataByLoc( Location)); 查找指定数据的位置( findLocationOfData( Data))。 辅助实现的操作
链表实现系列(一)——简单链表Java实现
简单链表的原理在这里就不赘述了,推荐一篇比较不错的博客:链表原理 需要实现的操作包括: 在头节点之前插入节点; 在尾节点之后插入节点; 删除包含指定数据的节点; 删除尾节点; 查找包含指定数据的节点; 获取链表的长度; 辅助操作包括: 清空链表; 判断链表是否为空。 下面是简单链表的实现
/**
* 注意:该链表实现不适合用于保存有重复元素的集合
*/
public class SingleList<Type> {
public static class SingleNode
链表实现系列(二)——双向链表Java实现
双向链表原理见博客:数据结构 | 双向链表简单实现及图示 (注:我采用的是范式实现,如需实现具体链表,只需将Type改为具体类型即可。) 实现的操作包括: 在头节点之前插入节点; 在尾节点之后插入节点; 删除包含指定数据的节点; 删除尾节点; 查找包含指定数据的节点; 获取链表的长度; 辅助操作包括: 清空链表; 判断链表是否为空。 下面是双向链表节点的代码(DoubleNode)
public class DoubleNode<Type> {
/**
* data : 节
队列实现系列(一)——队列的数组实现(Java版)
队列的原理见博客:队列(queue)原理 使用数组来实现队列时,如果用一般的方式实现,还是比较简单的。一般队列和循环队列的实现,只是在个别地方会有不同,我在代码里已经注释出,根据自己需要修改即可。 实现的操作: 入队 出队 获取队首元素 获取队列长度 辅助操作: 判断队列是否为空; 判断队列是否满; 清空队列。 下面是数组循环队列的实现代码(ArrayQueue)
/**
* Created by Hzc on 2019/1/28.
* 队列的数组实现
*/
public class
队列实现系列(二)——队列的链表实现(Java版)
不多哔哔,直接上代码,多于的话请看 队列实现系列(一)——队列的数组实现(Java版) 链表实现队列时,不需要考虑ElementOutOfBoundary问题,因此不需要做成循环队列。 Before:这里实现时,使用的链表不是Java自带的链表,是我自己写的链表,代码见: 链表实现系列(一)——简单链表Java实现 下面是链式队列实现代码(LinkedListQueue)
/**
* Created by Hzc on 2019/1/28.
* 队列的链表实现
* 使用的链表是单向链表
栈(Stack)的Java实现
1.什么是栈 栈是线性表的一种特殊表现形式,与队列的“先进先出”原则不同,栈的处理原则是“后进先出(Last in First out, LIFO)”。 过程理解:①向只有一个门的仓库存取货物的过程(后入库的货物必须先取出);②叠罗汉的过程(最后叠上的罗汉必须先取下)。 2.栈的基本操作 入栈(push):将数据保存到栈顶。入栈时,让栈顶索引移动到栈顶元素的位置即可。 出栈(pop):将栈顶数据弹出。出栈时,先将栈顶元素保存,再将栈顶索引移动到栈顶元素的下一个元素即可。
二叉树(BinaryTree)的Java详细实现
关于二叉树的基本概念:二叉树基本概念 二叉树实现的方法: * isEmpty():判断树是否为空。 * clear():清空二叉树。 * add(BTNode, Type):向指定节点添加指定的孩子。 * height():计算二叉树的高度。 * size():计算二叉树的大小。 * findNode():查找包含指定数据的节点是否存在。 * findParent():查找包含指定数据的节点的父节点。 * recursePreIterate():递归先序遍历二叉树。 * recurseInIt
今日推荐
周排行