C/C++
Atom丶pro
努力学习软件的通信人!
展开
-
ffmpeg: moov atom not found
ffmpeg: moov atom not found记录一次 ffmpeg 封装 mp4 文件播放不出来。使用 ffplay 报错 moov atom not found。如果在合成 mp4 时(不包括任何编解码)ffmpeg 提示各种 Assertion next_dts >= 0 failed at src/libavformat/movenc.c:1025等报错信息基本上都是在调用 av_interleaved_write_packet 写文件的时候不正确,这里我的写视频和写音频 pack原创 2021-01-22 10:11:24 · 17496 阅读 · 1 评论 -
FFmpeg 音视频编解码学习,分别用 C 语言,C++ 实现,基于 FFmpeg 4.2 API
代码和注释见 Githubhttps://github.com/Atom-pro/ffmpeg-demo原创 2020-09-30 18:08:52 · 905 阅读 · 0 评论 -
数据结构——单链表
前面介绍了顺序表的特点和实现!但是顺序表有很多的不足,比如要给顺序表的前面插入一个数据,就必须先把后面的数据先一个一个的往后挪动,然后再将所要插入的数据放进去。就相当于一个数组一样。还有就是顺序表的大小分配,如果采用静态分配内存的方式,那么势必就会造成剩余内存的浪费,不利于CPU工作。要是用动态内存分配,可以减少内存浪费情况,但是一次性开辟的内存不能太大也不能太小,遇到一个结构体数据刚原创 2017-06-08 23:38:53 · 756 阅读 · 0 评论 -
单链表常见面试题(基础篇)
1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 2.从尾到头打印单链表 3.删除一个无头单链表的非尾节点 4.在无头单链表的一个节点前插入一个节点 5.单链表实现约瑟夫环 6.逆置/反转单链表 7.单链表排序(冒泡排序&快速排序) 8.合并两个有序链表,合并后依然有序 9.查找单链表的中间节点,要求只能遍历一次链表 10.查找单链表的倒数第k个原创 2017-06-13 14:20:12 · 495 阅读 · 0 评论 -
C++的6种默认函数及运算符重载
C++类和对象我们知道C语言是面向过程的编程语言,而C++是面向对象(OPP)的编程语言。 面向对象是一种程序设计范型,也是一种程序开发的方法。而对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装在里面,以提高软件的重要性、灵活性和扩展性。 类(class)是C++中的特有的,形似于C语言中的结构体! 类有三大特性:封装、继承、多态 在一个类中,可以分为两种对象原创 2017-07-04 22:16:02 · 4656 阅读 · 0 评论 -
日期计算器
生活中我们可能要计算一些距某一个时间还有多少天的时候,但是在日历里算起来可能要麻烦一下,在学了C++的类之后可以很好的解决这一类的问题。例如距高考还有多少天、100天之后是几号等。 接下来就用日期类完成这些基本的日期运算功能原创 2017-07-06 22:36:41 · 6940 阅读 · 0 评论 -
复数类实现
实现复数类的++、–、+、-、比较大小等原创 2017-07-06 22:55:31 · 446 阅读 · 0 评论 -
C++类实现顺序表和双向链表
C++类实现顺序表与双向链表顺序表1.#include 2.#include 3.using namespace std;4.5.typedef int DataType;6.7.class Seqlist8.{9.public:10. Seqlist()11. :_pData(new DataType[3])12. ,_capacity(3)13.原创 2017-07-21 17:27:52 · 400 阅读 · 0 评论 -
C++继承
C++继承继承是C++中一种重要的对象复用手段,并且也是以后实现多态的基础在类中有三种访问限定符:public、protected、private。所以在继承方式上也就有三种方式的继承:分别是1、公有继承(关键词:public) 2、保护继承(关键词:protected) 3、私有继承(关键词:private)一般的继承格式为 class 子类:访问原创 2017-07-24 15:58:33 · 346 阅读 · 0 评论 -
剖析C++5种继承模型
剖析C++5种继承模型单继承若一个子类(派生类)只有一个父类(基类)时,叫单继承。 若一个子类(派生类)有有多个父类(派生类)时,叫多继承。 先来看看单继承模型1.class C2.{3.public:4. C()5. {6. cout"C()";7. }8.9. int _c1;10.};11.12.class B: public原创 2017-07-25 09:48:41 · 485 阅读 · 0 评论 -
C++多态
C++多态多态是C++三大特性之一。 简单来说多态就像是“一个接口,多种形态”。多态根据函数地址绑定的先后次序可以分为静态多态和动态多态。静态多态:函数的调用是在编译期间完成的(静态绑定。函数重载)。 动态多态:函数的调用时在程序运行期间完成的(动态绑定。函数重写)要实现动态绑定,要有两个条件。1、必须是虚函数。 2、通过基类类型的指针或引用原创 2017-07-28 15:30:22 · 531 阅读 · 0 评论 -
String类
#define _CRT_SECURE_NO_WARNINGS 1#include #include using namespace std;class String{public: String(const char *str = " ") :_str(new char[strlen(str)+1]) ,_size(strlen(str)) ,_capacity(_s原创 2017-07-28 15:34:29 · 306 阅读 · 0 评论 -
虚函数表&&多态模型
虚函数表&&多态模型在虚拟继承时,在派生类中会有偏移量表格指针,用来指向偏移量表格。在多态中如果派生类将基类的虚函数重写之后,那么基类中的虚函数和派生类中的虚函数在内存中的存储位置又是什么样的呢?单继承多态模型1.class Base2.{3.public:4. virtual void Funtest1()5. {6. cout"Base::Funt原创 2017-07-28 18:42:52 · 916 阅读 · 0 评论 -
C++入门知识
C++命名空间命名空间是ANSI C++引入的可以有用户命名的作用域,用来处理程序中常见的同名冲突。 在做一些大型工程的时候往往需要用户定义头文件,当一个工程中有好多头文件时,而这些头文件中有很多相同的变量名,编译器在进行预编译处理的时候,头文件中的内容取代了对应的#include指令,这样就在一个程序文件中出现了好几个相同的变量名,这时候编译器也不知道这个变量名代表哪一个,所以会在编原创 2017-06-20 09:07:02 · 796 阅读 · 0 评论 -
注释转换-小程序
编写代码时会有多种注释方式,但有的编辑环境不识别其他的注释方式,因此做个小项目来实现将注释方式统一的改为一种。本次注释转换这个小项目就是将所有的C注释全部转换为C++注释。要实现这个转换就要先理清实际过程中代码都有哪几种状态!所以先来列一个状态转换机来梳理一下什么情况是什么状态。简单考虑有以下几种状态:1、无状态:代码的正文部分2、C状态:注释方式为C注释3、C++状态原创 2017-06-06 23:50:26 · 1540 阅读 · 0 评论 -
链表面试题(进阶)&&复杂链表的复制
复杂链表的复制,链表面试题原创 2017-06-17 22:49:35 · 294 阅读 · 0 评论 -
C语言下的创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。
#define _CRT_SECURE_NO_WARNINGS 1#include #include #include void menu(){ printf("*********** 0、初始化数组 **********\n"); printf("*********** 1、清空数组 **********\n"); printf("*********** 2、逆置数组原创 2017-04-09 17:05:41 · 563 阅读 · 0 评论 -
C程序下的三子棋
还记得小时候一下课就用石子和同学在地上玩的三子棋吗?接下来我们一起来做一个模拟游戏来玩一下!如果要用代码来写,应该怎么写呢?思维逻辑:1、打印个开始菜单2、进入游戏3、先打印一张棋盘4、玩家先下或者电脑先下5、不管谁下一步,都要检查一下是否赢了,如果赢了跳出、没赢继续6、赢了之后输出赢得一方,输出谁赢了然后打印棋单,如果平局,输出平局以下是代码!(t原创 2017-04-04 18:07:20 · 507 阅读 · 0 评论 -
一维数组和二维数组的运算(sizeof与strlen的区别)
在数组运算前,先了解一下数组的解引用到底是怎么回事。#include #include int main(){ int arr[] = {1,2,3,4,5,6,7,8,9,0}; printf("%d\n", *arr); system("pause"); return 0;}这段代码输出来的是什么呢?由此可见,数组的数组名其实是数原创 2017-04-03 17:45:59 · 6769 阅读 · 1 评论 -
C程序下的深度冒泡排序
深度冒泡排序(元素从小到大排序)例如:arr[ ]里的元素为 9 5 6 8 4 3 1 7 2在第一次排序时,先比较前两个元素的大小,如果第一个元素大于第二个元素则两个交换,继续比较第二个和第三个。以此类推,当倒数第二个和最后一个比较完就把最大的那个元素交换到了最后一位(最多交换了n-1次)当把最大的交换到最后一位后,接下来就原创 2017-04-03 14:49:43 · 339 阅读 · 0 评论 -
C语言中的操作符(详)
学习C语言,会用到很多的操作符,而这些操作符又有非常多的用法,下面将一些常见的操作符进行整理和解释!操作符: 算数操作符 移位操作符位操作符 赋值操作符 单目操作符关系操作符 逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员常见操作符具体的用法算术操作符+ - * / %原创 2017-03-26 14:50:24 · 367 阅读 · 0 评论 -
C语言下程序的堆栈调用(详细,图示)
以前接触程序时,只知道程序写的对,一般都能运行出来,但是却不知道程序是怎么一步一步将每一步编译链接起来的,今天我们用汇编来看一下程序到底是怎么在程序中运行的。原创 2017-04-18 19:10:48 · 10257 阅读 · 2 评论 -
C语言字符串操作符的解读,模拟
我们平时写代码对字符进行操作时,常常会用到库函数里的字符操作符,那这些库里的操作符究竟是怎么计算的,现在我们来对这些库函数进行剖析,并且来模拟实现一下常见的库函数字符串操作符1、strcmp2、strcpy3、strcat4、strstr5、strchr6、strlen7、memcpy8、memmove1、strcmp先来看看库函数里的s原创 2017-05-10 00:57:31 · 551 阅读 · 0 评论 -
C语言的简易通讯录
在我们的平常生活中常常会用到电话通讯录,常用的功能有添加联系人,删除,查找,删除,清空,显示,按姓名排序等现在我们就来实现以下要求的简易通讯录实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显原创 2017-05-15 14:13:12 · 910 阅读 · 0 评论 -
使用动态内存分配的通讯录实现
实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人静态内存开辟点击打开链接上一篇博客写出了先给结构体开辟一块大原创 2017-05-17 17:12:16 · 709 阅读 · 0 评论 -
数组与指针的理解
本文对一些常见的指针进行了剖析,笔者是初学者有的地方可能说的不好,还请大佬们补充说明,不胜感激!原创 2017-05-08 15:45:56 · 665 阅读 · 0 评论 -
顺序表的动态内存实现
线性表的顺序存储结构就是,把线性表中的所有元素按照其逻辑顺序依次存储在计算机存储器中指定存储位置开始的一块连续的存储空间中。因此,线性表的顺序存储结构是利用数组来实现的,数组的基本类型就是线性表中元素的类型。实现一个顺序表首先要制定一个顺序表的长度和存放数据的地址,还必须有已经存放的数据数量和总数量,顺序表的实现可以是静态的也可以是动态的,不过静态比较浪费内存,所以采用动态内存分配来实现顺序表原创 2017-05-31 09:51:36 · 674 阅读 · 0 评论 -
C语言写的扫雷小程序
还记得上初中那会,上信息课都在电脑上玩的扫雷吗?那时候只会玩,不知道怎么实现,现在有了这个能力,也写了一个,虽然很糙,但还是能凑合玩的。废话不多说,直接上代码#define _CRT_SECURE_NO_WARNINGS 1#ifndef __GAME_H__#define __GAME_H__#include #include #include #include #原创 2017-04-12 21:09:41 · 498 阅读 · 0 评论