
c/c++编程艺术
文章平均质量分 77
MineYuer
咸鱼大学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++类型转换
https://www.nowcoder.com/questionTerminal/5e5bb7214788436cb966e67305a8041e?pos=242&mutiTagIds=138&orderByHotValue=1看一道题: 假设定义了ClassA* pA2,下面正确的代码是? class A{ public: virtual void FunTest...转载 2018-08-17 21:31:52 · 567 阅读 · 0 评论 -
c++类默认的成员函数
空类的大小构造函数默认构造函数拷贝构造函数默认拷贝构造函数析构函数关于构造和析构的顺序运算符重载友元函数的出现static修饰类成员C++中的const内联函数空类的大小class Person { }; sizeof(Person) //1空类的大小为1.因为实例化类后为每个对象分配内存空间,若要是0空间,对象会被分配到...原创 2018-06-16 10:23:17 · 1061 阅读 · 0 评论 -
c++动态内存管理深入理解
C语言三种开辟堆内存方式malloc底层实现,本质C++的动态内存管理malloc和free, new和delete深入探究new和delete所做的工作定位newC语言三种开辟堆内存方式c语言用3个函数进行动态内存分配。malloc申请一段连续的堆空间并返回首地址,不能初始化内存空间。calloc会将分配到的空间每一位初始化为0,因此效率稍低。...原创 2018-06-20 20:40:18 · 811 阅读 · 0 评论 -
c++基础,引用重载命名空间
命名空间输入输出函数重载参数缺省指针和引用引用传参引用做返回值总结命名空间命名空间解决全局命名冲突的问题 标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在 采用标准C++的平台上使用标准C++库中的组件,只要写一个using指示符: using namespace std; 就可以直接使用标准C++库中的所有成员。 或者 ...原创 2018-06-05 22:21:53 · 856 阅读 · 0 评论 -
面向对象的理解
1、对于OO(面向对象)的含义,并非每一个人的看法都是同样的。 即使在如今。假设问十个人,可能会得到15种不同的答案。差点儿全部的人都会允许继承和多态是OO中的概念。大多数人还会再加上封装。 另一些人会加上异常处理。而可能会没有人将模板也包括进去。问题的关键在于:对于某个特性是否是属于OO的,往往都存在着不同的观点。而每一种观点都有着热情的拥护者。 2、C++的标准化工作对C++最重要的贡献...原创 2018-06-02 22:33:25 · 873 阅读 · 0 评论 -
有穷状态机思想——注释转换
有穷状态机思想——注释转换画状态转换图所谓自动机思想就是假设有一台机器,上面有状态指示灯,作用是通过传送带前后改变通过的物体。当状态灯保持时,货物按一定规则输出,当状态灯突变时,货物根据另一种规则输出。利用这种思想,可以将所有有穷的状态列出来,大大清晰了思路,只需要往每一个状态里填对应的处理函数。例如注释转换问题,把形如/**/的c风格注释转换为c++风格//注释。如图...原创 2018-05-18 22:57:18 · 3518 阅读 · 0 评论 -
c头文件包含——前置声明
现有两个.h文件maze.h,stack.h,还有一个stack.c。maze.h#pragma once#include "stack.h"typedef struct position { int x; int y;}Position;void fun(Stack * a);stack.h#pragma once#include "maze.h"...原创 2018-04-21 16:46:25 · 1004 阅读 · 0 评论 -
c语言知识点总结大图
详细知识点配合博客食用原创 2018-04-06 14:02:49 · 1077 阅读 · 1 评论 -
c语言结构体等自定义类型探究
结构体类型创建结构体初始化访问结构体成员结构体内存对齐位段联合结构体类型创建结构体声明格式struct tag{ member_list;}variable_list;tag是结构体的名称,大括号里放成员变量,括号外面相当与直接定义的变量,与struct tag var;是相等的定义方式。*需要注意任何两个结构体都是不同类型,哪怕...原创 2018-03-28 16:47:20 · 554 阅读 · 0 评论 -
简易通讯录c语言实现
主要用到的知识点动态开辟内存,根据用户需要创建通讯录大小练习结构体的声明定义使用熟悉指针传参的过程,提高鲁棒性add_list.h#pragma once#define _CRT_SECURE_NO_WARNINGS#define NAME 20#define PHONE 20#define ADDRESS 50struct Person { char n...原创 2018-04-09 17:20:10 · 835 阅读 · 0 评论 -
c语言回调函数
回调函数究竟有什么作用呢设想现在有一个库函数叫bubble_sort 可以使用冒泡排序算法,但是用户有时候想调用它对整形数组排序,有时又想对字符数组进行排序,那怎么设计这个库函数呢?解决方法就是在库函数中留一个参数是函数指针,指向回调函数,而这个回调函数由用户编写,根据自己的需求写出具体的类型比较规则。这样用户不需要知道库函数具体的实现,只需要传入一个比较函数就可以得到答案。...原创 2018-03-21 18:23:58 · 385 阅读 · 0 评论 -
c语言小游戏——贪吃蛇和俄罗斯方块
c语言小游戏——贪吃蛇和俄罗斯方块贪吃蛇效果: 运行环境:win10,vs2017 代码地址:https://github.com/zzaiyuyu/Snake/blob/master/main.c首先思考一下设计这个游戏的流程model部分实体有游戏,蛇,坐标,食物,墙,所以我们的模型先抽象出来。蛇用一个链表表示,链表的每个节点都是x,y坐标,蛇还要保存当前移...原创 2018-06-16 14:07:08 · 3448 阅读 · 0 评论 -
C++String类与深浅拷贝
C++String类与深浅拷贝浅拷贝编译器默认合成的拷贝构造和赋值运算符是浅拷贝,意思是从编译器的角度看到什么就原封不动拷贝到当前对象。 导致的问题:多个对象使用同一块空间,释放的空间被其他对象访问会导致程序崩溃。以下实现深拷贝版本,将对象动态申请的资源也拷贝到当前对象。class String {public: String(const char* str =...原创 2018-06-24 16:38:17 · 735 阅读 · 0 评论 -
C++11新特性
C++11新特性初始化变量自定义类型可以用大括号(构造列表)构造列表还可以作为函数参数和返回值在定义变量时检测精度丢失问题自动类型auto回炉重造,在编译期间推到变量类型。主要用在复杂类型减少代码量,比如std::vector<int>::iterator itauto不能做函数参数,定义类的non-static成员变量,实例化模板decltype可以...原创 2018-08-12 10:31:49 · 332 阅读 · 0 评论 -
C++STL库探究
C++STL库探究C++STL库探究六大组件空间配置器仿函数容器选择vector ,list ,deque ?vector实现细节list实现细节deque和vector的差异关联容器关联容器和序列容器的差异STL即标准模板库,封装了一些常用的数据结构和算法它的价值是从小来说,给用户直接提供了一套高效的算法接口,并且讲算法和数据容器分离,让算法...原创 2018-08-09 17:05:01 · 1041 阅读 · 0 评论 -
C++智能指针剖析
智能指针智能指针的版本auto_ptrscoped_ptrshared_ptr循环引用问题智能指针 什么是智能指针?程序里有一些指针管理着资源,比如文件指针,指向malloc动态分配空间的指针。这些指针在使用完后必须被释放,否则有内存泄露问题。而程序员往往会因为程序执行流复杂而疏忽了释放这些指针指向的资源,所以,智能指针智能在自动释放资源。这里的概...原创 2018-07-20 16:47:29 · 958 阅读 · 0 评论 -
C++泛型编程——模板,容器实现
泛型编程模板技术模板实例化模板的使用模板参数模板特化函数模板特化类模板特化容器适配器分离编译模式泛型编程泛型编程是编写和类型无关的逻辑代码,是代码复用的另一种手段。模板是实现泛型编程的一种技术。以往要编写一个通用的函数有3种方法,函数重载,使用公共基类,宏函数。然而函数重载需要对各种类型一一枚举,且一个错个个错。第二种继承公共基类并重写虚...原创 2018-07-15 09:15:17 · 8462 阅读 · 0 评论 -
C++大整数类
实现了 + - * ,除法还没有完成。 利用string类模拟手工加减乘。头文件#pragma once#include &lt;string&gt;#include &lt;iostream&gt;using namespace std;typedef long long INT64;class BigData {public: friend ostream&a...原创 2018-06-28 10:36:55 · 2150 阅读 · 0 评论 -
C++多态——虚函数,调用原理
多态分为静态多态和动态多态什么时候形成动态多态函数重载,同名隐藏,重写抽象类多态调用原理 什么是多态?通俗的,一个事物有多种状态,在C++里是指一个基类成员函数被不同的派生类或者基类调用,有不同的结果。用基类的指针或引用操纵多个类型的能力被称为多态多态分为静态多态和动态多态静态多态是在编译期间完成,根据函数参数实参判断需要调用的函数。以此形成了...原创 2018-07-01 16:37:40 · 1828 阅读 · 0 评论 -
C++继承概念——权限,对象模型,菱形虚拟继承
访问权限和继承权限派生类默认的成员函数赋值兼容规则菱形继承和虚拟继承 什么是继承?继承是面向对象设计的重要部分,允许在原有类特性上进行扩展和代码复用!符合认知上的从浅入深的过程。访问权限和继承权限访问权限是指对于本类或者对象的成员来说的,继承权限是在访问权限的基础上谈的,这一点很容易理不清。访问权限:private: 只能由该类中的函数、其友...原创 2018-07-01 10:30:22 · 932 阅读 · 0 评论 -
C++获取函数运行时间
第一种方法: GetTickCount()获取系统启动后的时间间隔,精确度有限,跟CPU有关。 第二种方法: QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以us为单位计时.但是它确切的精确计时的最小单位是与系统有关的,所以,必须要查询系统以得到QueryPerformanceCounter()返回的嘀哒声的频率. QueryP...原创 2018-06-25 15:10:45 · 1876 阅读 · 0 评论 -
C++类和对象的概念
C++类和对象的概念面向对象程序设计 概念:(Object Oriented Programming,缩写:OOP)是一种程序开发的方法。 对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性在c语言中使用struct可以对数据进行抽象封装,在c++中用class封装程序和数据,其访问权限体现了封装性。封装:隐藏对象的属性...原创 2018-06-10 17:31:13 · 5001 阅读 · 1 评论 -
C++日期类
学会调用写好的函数完成其他更复杂的函数。#include <iostream>using namespace std;class Date{public: friend ostream& operator<<(ostream&, Date&); Date(int year = 2018, int month = 6, ...原创 2018-06-24 20:56:09 · 805 阅读 · 0 评论 -
静态顺序表c语言实现
实现涉及到顺序表的增删改查排序。seqList.h#pragma oncetypedef int DataType;#define MAX_SIZE 10 typedef struct SeqList{ DataType _array[MAX_SIZE]; int _size; // 表示顺序表中有效元素的个数 }SeqList, *PSeqList;// ...原创 2018-04-07 22:12:09 · 413 阅读 · 0 评论 -
常用c语言字符串库函数(自行实现)
strlenstrcpystrcatstrstrstrcmpstrchrmemcpymemmove优化版冒泡函数经典的二分查找求第N个斐波那契数联合体判断系统大端小端strlen#include <stdio.h>#include <assert.h>//利用assert断言防止野指针,循环计数int my_str...原创 2018-02-25 17:08:51 · 3055 阅读 · 0 评论 -
c语言函数调用过程-栈帧详解
c语言函数调用过程-栈帧详解c语言函数调用过程-栈帧详解通过栈帧结构修改函数返回时的跳转地址使非正常跳转的函数回来手动调整main栈帧结构 测试环境,vs2017,win10用一个测试代码来看#include <stdio.h>int fun(int a, int b){ int z = a + b; return ...原创 2018-03-10 16:47:41 · 2610 阅读 · 4 评论 -
C语言预处理汇编过程
程序环境和预处理程序环境和预处理从源代码到可执行文件的过程预处理到编译到汇编(Linux)链接预处理详解预定义符号#define参数插入到字符串串#undef函数和宏的对比命令行定义条件编译文件包含从源代码到可执行文件的过程多个源文件分别进行编译生成目标文件(.obj)—-&gt;由连接器和链接库进行链接—–&gt;形成可执行文件预...原创 2018-01-11 20:05:18 · 554 阅读 · 0 评论 -
C语言实现扫雷
C语言实现扫雷目录结构和上一个五子棋一样一样的,参考五子棋程序。代码流程 用户输入,选择游戏难度,此处使用了枚举常量PLAY1和PLAY2与SWitch语句进行搭配使用,可以让代码清晰明了。 进入游戏的流程是根据用户输入的难度选择,创建不同大小的数组空间(棋盘),这里本应该用malloc动态申请内存来做,但是偷懒,我用符号常量定义了一个大空间ROW行和COL列,在选择原创 2018-01-11 15:51:21 · 542 阅读 · 0 评论 -
C语言实现五子棋
C语言实现五子棋首先项目的目录结构是这样的函数声明在头文件里,函数实现在game.c中,测试和主函数写在test.c中。整个代码是以TDD模式写下来的,先写测试函数,再反过头去实现具体的函数。代码流程 用户输入,选择游戏难度,此处使用了枚举常量PLAY1和PLAY2与SWitch语句进行搭配使用,可以让代码清晰明了。 进入游戏的流程是根据用户输入的难度选择原创 2018-01-11 15:22:54 · 4934 阅读 · 0 评论 -
c语言 几个基础练习题
实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表#include <stdio.h>void print(int row){ int i = 0; int j = 0; for(i = 1;i <= row;i++){ for(j = 1;j <=i;j++){原创 2017-12-26 23:06:15 · 4499 阅读 · 0 评论 -
c语言练习 插入排序 gcd求解
12月7随笔else if 语句使用时注意在判断中只进入一次。if(year % 4 ==0){ if(year % 100!= 0)} else if(year % 400 ==0) //不会进到这一句的vc 编译器 F10 调试 F11进函数 可以通过宏定义可以消除warning 。32位 指针是4字节 volatile 保证内存可见性。每次取变量从内存中取 .在c编译环境,c原创 2017-12-08 09:32:21 · 492 阅读 · 0 评论 -
c语言 数组形参 二分查找 随机种子 猜数游戏
数组做形参如果是传值会拷贝,如果是数组就不会拷贝了而是把第一个元素的地址传入,这也是定义形参不需要定义大小的原因。本质上是应该定义 int* ,定义成a[]只是语法上好看。因此在函数中计算传入数组的大小是不存在的!!解决办法只能是增加参数 int size;在如下二分查找代码里可以看出#include <stdio.h>int binary_search(int ar...原创 2017-12-15 09:53:30 · 504 阅读 · 1 评论 -
c++ 模拟进程调度 (链表实现)
所用的数据结构: 1.struct Process{ string proname; int time,pri; bool status; }; 包含了进程名,优先权,运行时间和运行状态的结构体。 2.struct Node { Process val; Node *next; Node(Process x):val(x),next(原创 2017-11-25 17:06:38 · 3753 阅读 · 0 评论 -
c语言练习 循环结构 缓冲区 逗号表达式
12月12随笔%p输出地址int arr[1]; printf("%p",arr1); //打印数组首地址键盘缓冲区scanf和getchar 函数是在缓冲区里取东西的,如果缓冲区中为空才会等待取东西。scanf("password"); //这里scanf会从缓冲区拿走\n之前的值,留下一个\n//fflush(stdin); //刷新缓冲区原创 2017-12-13 15:37:38 · 870 阅读 · 0 评论 -
c++ 模拟银行家调度算法 避免进程死锁
模拟银行家调度算法 避免进程死锁题目要求 3.2**、银行家算法** 设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查: (1)如果Requesti[j]≤Need[i,j],便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布最大值。 (2)如果原创 2017-12-10 16:51:38 · 2459 阅读 · 0 评论 -
数据在内存中的存储
数据在内存中的存储大小端存储整型提升unsigned无符号数造成死循环类型定义范围的库函数浮点型存储CC程序内存的分配const的深度讲解及volatile关键字介绍const 修饰指针的作用数据在内存中的存储大小端存储大端,把一个数字高位字节序的内容存储到低地址,低位字节序内容存储到高地址处小端,把一个数字高位字节序的内容存储到高地址,低位字节序内容存储原创 2018-01-13 11:57:31 · 525 阅读 · 0 评论 -
c语言 无符号数 结构体指针 整型提升
12月21日随笔12月21日随笔无符号数 unsigned结构体指针整型提升关于编译顺序的问题本文有后续详细讲解无符号数 unsigned它和普通的变量定义是一样的,只不过差别在于系统对这块内存空间的识别不同。在下例中给n传的实参是-1,在函数中以%d打印仍是-1.而以无符号数打印则是32位全1的二进制数转换的整数。#include void fun原创 2017-12-21 22:18:09 · 1088 阅读 · 0 评论 -
c语言可变参数函数详解
阅读本篇需要具备栈帧的知识,见栈帧详解看两个可变参数的具体使用例子求几个数的平均数#include <stdio.h>#include <stdarg.h>int avg(int n, ...){ va_list arg; int i = 0; int sum = 0; va_start(arg, n); ...原创 2018-03-15 23:38:52 · 599 阅读 · 0 评论 -
c语言递归练习习题
求第n个斐波那契数求n的k次方输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19递归实现字符串反转递归和非递归分别实现strlen递归求n的阶乘递归方式实现正序打印一个整数的每一位求第n个斐波那契数#define _CRT_SECURE_NO_WARNINGS#include <st...原创 2018-03-15 16:00:05 · 6627 阅读 · 5 评论 -
c语言字符串习题
反转字符串字符串左旋k位查找一个字符串中第一个只出现1(K)次的字符输出数字三角形一个正整数有可能可以被表示为 m(m>=2) 个连续正整数之和调整数组使奇数全部都位于偶数前面杨氏矩阵判断一个字符串是否为回文字符串判断一个数是否为回文数反转字符串#include <stdio.h>#include <string.h>#...原创 2018-02-26 17:29:29 · 9450 阅读 · 1 评论