![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
coding
文章平均质量分 88
C和C++
hututu_404
Waiting Here~~~~~~~
展开
-
C++中struct和class
在C++中我们可以看到struct和class的区别并不是很大,两者之间有很大的相似性。那么为什么还要保留struct,这是因为C++是向下兼容的,因此C++中保留了很多C的东西。一.首先看一下C中struct1.struct的定义struct A{ int a; int b; //成员列表};注意:因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程中,struct不能包含任何函数。否则编译器会报错面向过程的编程认为,数据和数据......转载 2022-07-29 16:35:36 · 683 阅读 · 0 评论 -
Linux中的进程栈和线程栈
Linux中的进程栈和线程栈转载 2022-04-19 20:38:41 · 1904 阅读 · 2 评论 -
浅析长度为0的数组
Part1转自:浅析长度为0的数组 - 拾月彷徨的个人空间 - OSCHINA - 中文开源技术交流社区 长度为0的数组在标准c和c++中是不允许的,如果使用长度为0的数组,编译时会产生错误,提示数组长度不能为0。但在GNUc中,这种用法却是合法的。它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理。如果你将上面的长度为0的数组换为指针,那么在分配内存时,需采用两步:首先,需为结构体分配一块内存空间;其次再为结构体中的成员变量分配内存空间。这样两次分...转载 2022-03-12 17:22:45 · 1332 阅读 · 0 评论 -
类Unix系统中,fd指的啥?
一、文件描述符(File Descriptor)简介socket的fd指什么?fd 是(file descriptor)即文件描述符,这种一般是BSD Socket的用法,用在Unix/Linux系统上。fd全称是file descriptor,是进程独有的文件描述符表的索引。维基百科上介绍:file descriptors index into a per-process file descriptor table maintained by the kernel, that in tur转载 2022-03-11 02:08:31 · 833 阅读 · 0 评论 -
函数重载,隐藏,重写
1.函数重载(Function Overload)1.1定义C++规定在同一作用域中,同名函数的形式参数(指参数的个数、类型或者顺序)不同时,构成函数重载。1.2用法比如,要从两个变量中返回其中较大的一个值,可以编写如下两个构成重载的函数。int max(int a,int b){ return a>b?a:b;};double max(double a,double b){ return a>b?a:b;}1.3注意事项(1)函数返回值类型转载 2021-10-20 12:48:00 · 551 阅读 · 1 评论 -
用Google的gflags优雅的解析命令行参数
写了这么多年的Linux下C/C++代码,一直使用getopt_long来解析命令行参数,同时定义一个全局的struct来保存各个命令行参数的值。虽然用得比较“繁琐”,但也安于现状。最近突然发现了Google早在多年前就开源了一个解析命令行参数的“神器”gflags。赶紧来爽一把。安装1、去官网下载一个最新的版本(gflags-2.1.1.tar.gz)。2、现在流行cmake的构建方式,gflags的最新版本也改为使用cmake了。还好我最近也刚刚学习了cmake,算是跟上了潮流。[amc转载 2021-08-27 17:58:08 · 446 阅读 · 0 评论 -
更深入一点理解switch语句及c/c++对const的处理
更深入一点理解 switch 语句 及 c/c++ 对 const 的处理 谢煜波------------------------------------------------转载请注明原作者,以出处~~------------------------------------------------前段时间在论坛上看见台湾李维在<<Borland传奇>>一书中对windows编程模式中,消息处理部...转载 2021-08-11 10:55:25 · 260 阅读 · 0 评论 -
BIN、HEX,ELF,AXF文件的区别
1.BinBin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。2.HexIntelhex文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持..转载 2021-03-03 11:41:45 · 593 阅读 · 0 评论 -
【剑指Offer】面试题17. 打印从1到最大的n位数
题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印 n 为正整数解题思路1、针对本题的常规思路,利用pow函数,秒解2、假设可能出现大数(本题不可能),转换为大数问题求解...转载 2020-04-07 10:00:13 · 178 阅读 · 0 评论 -
【剑指Offer】面试题15. 二进制中1的个数
题目请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。示例 2:...转载 2020-04-07 09:46:10 · 158 阅读 · 0 评论 -
【剑指Offer】面试题11. 旋转数组的最小数字
题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0思路一:暴力代码时间复杂度:O(n)空...转载 2020-04-07 09:37:31 · 167 阅读 · 0 评论 -
【剑指Offer】面试题10. 斐波那契数列
题目写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:100000...转载 2020-03-29 22:58:39 · 665 阅读 · 0 评论 -
【剑指Offer】面试题09. 用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[nu...转载 2020-03-29 22:32:32 · 258 阅读 · 0 评论 -
【剑指Offer】面试题07. 重建二叉树
题目输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <=...转载 2020-03-29 21:54:22 · 153 阅读 · 0 评论 -
【数据结构】二叉树遍历
前序遍历(根左右)前序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。若二叉树为空则结束返回,否则:(1)访问根结点。(2)前序遍历左子树。(3)前序遍历右子树...转载 2020-03-26 23:54:14 · 260 阅读 · 0 评论 -
【剑指Offer】面试题06.从尾到头打印链表
题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路一:反转数组代码时间复杂度:O(n)空间复杂度:O(1)class Solution {public: vector<int> reverse...转载 2020-03-25 23:59:50 · 417 阅读 · 0 评论 -
【剑指Offer】面试题05.替换空格
题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000思路:双指针暴力方法,从前向后遍历,遇到空格就替换,则每次替换需要移动空格后面O(n)个字符,所以总时间复杂度为O(n^2)。我们可以先计算出空格...原创 2020-03-25 23:42:36 · 99 阅读 · 0 评论 -
【剑指Offer】面试题04. 二维数组中的查找
题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, ...转载 2020-03-25 23:11:28 · 116 阅读 · 0 评论 -
【剑指Offer】面试题03. 数组中重复的数字
题目找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000思路一:哈希表初始化哈希表大小为...转载 2020-03-19 15:28:32 · 345 阅读 · 0 评论 -
最长递增子序列的三种算法
转载自:http://qiemengdao.iteye.com/blog/1660229最长递增子序列 问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.解法1:最长公共子序列法这个问题转载 2017-02-08 14:34:13 · 56791 阅读 · 21 评论 -
从0实现malloc函数
本文介绍如何用c语言实现一个简单的内存分配器,可替换glibc中的malloc(),calloc(),realloc(),free().这是一篇入门级别的文章,所以不会介绍所有的细节。 代码实现主要为了演示内存分配器的基本工作原理,所以和工业级内存分配器相比,缺少非常多的性能优化,分配内存时也不会按页对齐,但是至少,我们构建的内存分配器是可以工作的。在构建内存分配器之前,需要先介绍程序的内存布局。操作系统中的进程运行在它自己独有的虚拟地址空间,不同进程间的虚拟地址空间是独立、相互隔离的。虚拟...转载 2021-01-06 16:41:53 · 201 阅读 · 0 评论 -
简述 LLVM 与 Clang 及其关系
随着 Android P 的逐步应用,越来越多的客户要求编译库时用 libc++ 来代替 libstdc++。libc++ 和 libstdc++ 这两个库有关系呢?它们两个都是 C++ 标准库,libc++ 是针对 Clang 编译器特别重写的 C++ 标准库,而 libstdc++ 则是 GCC 的对应 C++ 标准库了。从 Android 市场来说,Android NDK 已在具体应用中放弃了 GCC,全面转向 Clang,正如很早前 Android NDK 在 Changelog 中提到的那样:转载 2020-11-18 15:42:02 · 263 阅读 · 0 评论 -
The C Programing Language笔记
1、extern,逗号表达式#include <stdio.h>#include <stdlib.h>/****************************************** * Descir : 测试一个逗号表达式 *****************************************/int main(int argc, char *argv[]) {extern int Val ;//extern声明,使用全局变量原创 2020-11-05 15:56:33 · 160 阅读 · 0 评论 -
C语言中结构体直接赋值
FROM:http://codewenda.com/c语言结构体直接赋值/在C语言中结构体变量之间可以进行赋值操作吗?简单结构体的赋值先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。我们先下面一段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1转载 2020-11-05 09:27:41 · 6743 阅读 · 0 评论 -
C语言中的Doxygen注释模板
目录一、文件注释,放于文件的开头二、文件注释,放于文件的开头三、文件注释,放于文件的开头三、文件注释,放于文件的开头三级目录嵌入式C语言开发中通常使用Doxygen进行文档的生成。Doxygen支持多种格式,非常灵活,但排版不好就会显的比较杂乱,不便于阅读。下面给出一份注释模板。一、文件注释,放于文件的开头/*** @file * @brief This is a brief description.* @details This is the detail descr原创 2020-07-06 21:18:18 · 8027 阅读 · 0 评论 -
C语言指定初始化
C语言指定初始化数组指定初始化结构体指定初始化指定初始化综合使用新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入C90标准要求初始化的元素以固定顺序出现,与被初始化的数组或结构中的元素的顺序相同。在ISO C99标准中,可原创 2020-06-30 20:04:44 · 424 阅读 · 0 评论 -
C中的类型自动提升
同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们转换成同一种类型。以下是自动类型转换的基本规则:1. 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被转换成 unsigned int)。因为它们被转换成表示范围更大的类型,故而把这种转换称为“升级(...转载 2020-06-30 16:48:05 · 1127 阅读 · 0 评论 -
可变长度数组分析说明
1、零长度数组说明 长度为的数组在标准c和c++中是不允许的,如果使用长度为的数组,编译时会产生错误,提示数组长度不能为。但在GNUc中,这种用法却是合法的。它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理。如果你将上面的长度为的数组换为指针,那么在分配内存时,需采用两步:首先,需为结构体分配一块内存空间;其次再为结构体中的成员变量分配内存空间。这样两次分配的内存是不连续的,需要分别对其进行管理。当使用长度为的数组时,则是采用一次分配的原则,一次...原创 2020-06-30 16:23:12 · 1105 阅读 · 0 评论 -
【C++】引用作为函数参数
C++中,引用作为函数参数引用作为函数参数C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。————————————————————c++,函数传参:(1)将变量名作为实参和形参。这时传给形参的是变量的值,传递是单向的。如果在执行函数期间形参的值发生变化,并不传回给实参。因为在调用函数时,形参和实参不是同一个存储单元。//同c(2) 传递变量的指...原创 2020-03-19 15:51:36 · 9361 阅读 · 0 评论 -
【C++】swap
C++中的swap(交换函数)交换两个变量的值很简单。比如 int a = 1; b = 2; 交换a b的值这个很简单 很容易想到的是找个中间变量比如 int temp = a; a = b; b = temp;不需要中间变量可不可以?当然是可以的。比如【加减法】a = a + b;b = a - b;a = a - b;该方法可以交换整型和浮点型数值...转载 2020-03-19 15:31:17 · 1993 阅读 · 0 评论 -
《C和指针》阅读笔记-第5章操作符和表达式
《C和指针》阅读笔记-第5章操作符和表达式原创 2016-12-02 14:28:13 · 606 阅读 · 0 评论 -
ssprintf()函数和sscanf()函数的用法
ssprintf()函数和sscanf()函数的用法原创 2016-12-02 13:53:20 · 4645 阅读 · 0 评论 -
bit、Byte、bps、Bps、pps、Gbps的详细说明及换算
带宽应用的领域非常多,可以用来标识信号传输的数据传输能力、标识单位时间内通过链路的数据量、标识显示器的显示能力。1. 在模拟信号系统又叫频宽,是指在固定的时间可传输的资料数量,亦即在传输管道中可以传递数据的能力。通常以每秒传送周期或赫兹(Hz)来表示。2. 在数字设备中,带宽指单位时间能通过链路的数据量。通常以bps来表示,即每秒可传输之位数。bit电脑记忆体中转载 2016-12-02 10:02:54 · 7525 阅读 · 0 评论 -
《C和指针》阅读笔记--数据
《C和指针》阅读笔记--数据 第3章数据3.1整型字面值字面值是字面常量的缩写,这是一种实体,指定了自身的值,并且不允许发生改变。在缺省情况下字面值是最短类型但能完整容纳这个值。在整型字面值后添加字符L或者l,可以是这个整数被解释为long整型值,字符U或者u用于把数字指定位usigned整型值;在数值前面以0开头表示八进制(在ASCI码中,\data表示八进制),以0x开头表示十六进原创 2016-11-30 21:03:35 · 463 阅读 · 0 评论 -
《C缺陷与陷阱》阅读笔记-词法陷阱
《C缺陷与陷阱》阅读笔记-词法陷阱1.1 = 不同于 ==1.2 & 不同于 && | 不同于 ||1.3 词法分析中的“贪心法”编译器将程序分解成符号的方法是:每个符号应该包含尽可能多的字符。,需要注意的是,除了字符串和字符常量,符号的中间不能嵌有空白(空格符、制表符和换行符)。eg:下面的语句的本意似乎是用x除以p做指向的值,把所得的商再赋给y, y = x/*p;而实原创 2016-11-28 20:25:24 · 292 阅读 · 0 评论 -
C语言中函数参数入栈的顺序
C语言中函数参数入栈的顺序先通过一个小程序来看一看:#includevoid foo(int x, int y, int z){printf("x = %d at [%X]n", x, &x);printf("y = %d at [%X]n", y, &y);printf("z = %d at [%X]n", z, &z);}转载 2016-11-29 14:33:17 · 276 阅读 · 0 评论 -
printf 参数入栈顺序
先看一段代码a=1; printf("%d %d\n",a,a++); a=1; printf("%d %d\n",a++,a); a=1; printf("%d %d %d\n",a,a++,a); a=1; printf("%d %d %d %d\n",a,++a,a++,a); 其输出为:2 1 1 2 2 1 2 3 3 1 3因为C原创 2016-11-29 14:31:07 · 2279 阅读 · 0 评论 -
C语言 gets()和scanf()函数的区别
C语言 gets()和scanf()函数的区别scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结转载 2016-11-29 12:21:10 · 230 阅读 · 0 评论 -
c语言的自动类型转换
c语言的自动类型转换转载 2016-08-28 20:35:56 · 457 阅读 · 0 评论 -
sizeof
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。 sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:siz转载 2016-01-14 23:24:15 · 508 阅读 · 0 评论