![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
甲虫ss
这个作者很懒,什么都没留下…
展开
-
函数指针,走过路过来分析一下
void (*fun)(void);void (*fun[10])(void);void (*fun[10])(int,int,void(*)(void*));void (*(*fun)[10])(int,int,void(*)(void*));void (*(*(*fun)[10])(int,int,void(*)(void*)))(int,int,void(*)(void*));原创 2020-06-04 19:58:46 · 123 阅读 · 0 评论 -
如何使用 c 语言的二级指针
参考1: https://www.cnblogs.com/reality-soul/p/6372915.htmlvoid fun(void){ int tmp = 0; change(tmp); printf("################ tmp = %d /n"); return ;} void change(int tmp_t){ tmp_t =1; return;}void fun(void){原创 2020-05-25 11:25:12 · 134 阅读 · 0 评论 -
连续的二进制文件以两位为单位进行分割
需求:把二进制文件中类似这样的内容:436572746966进行分割为:43 65 72 74 69 66,#include<stdio.h>main(){ FILE * fp; char buffer[3300]; fp = fopen ("ca.txt.md", "r+"); memset(buffer,0x0,3300); fread(buffer, 3232+1, 1, fp); int val ; for(int i=0; i<3233;原创 2020-05-20 09:20:55 · 253 阅读 · 0 评论 -
结构体的成员的地址用法
#include <stdio.h>#define STUB__RESERVED_SIZE &(((response_status_t*)0)->reserved_0)typedef struct __attribute__((packed)){ unsigned char failed; unsigned char error; un...原创 2020-04-14 14:33:08 · 1124 阅读 · 0 评论 -
嵌入式 C 编程4字节对其写法
uint32_t padding_bytes = s_flash_write_size - size; uint8_t *data = (uint8_t *)payload; uint32_t padding_index = size; while (padding_bytes--) { data[padding_index++] = PADDING...原创 2020-03-20 16:03:03 · 207 阅读 · 0 评论 -
snprintf函数使用总结
【依赖头文件】#include<stdio.h>【函数原型】int snprintf(char *str, size_t size, const char *format, …);【函数参数】str:目标字符串;size:拷贝字节数(Bytes); format:源字符串; …格式【函数功能】最多从源字符串format中拷贝size字节的内容(含字符串结尾标志’\0’)到...原创 2020-03-03 09:32:30 · 706 阅读 · 0 评论 -
c 语言 漫谈 #define
#include <stdio.h>/* Request Methods */#define HTTP_METHOD_MAP(XX) \ XX(0, DELETE, DELETE) \ XX(1, GET, GET) \ XX(2, HEAD, HEAD) \...原创 2020-02-14 16:36:12 · 353 阅读 · 3 评论 -
C语言 typedef:给类型起一个别名
转载自:https://www.jb51.net/article/91181.htmC语言允许为一个数据类型起一个新的别名,就像给人起“绰号”一样。起别名的目的不是为了提高程序运行效率,而是为了编码方便。例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:struct stu stu1;struct 看起来就是多余的,但不写又会报错。如果为 struct stu 起了一个别...转载 2019-12-02 17:22:39 · 1058 阅读 · 0 评论 -
char str[]和char *str的区别
char str[]和char *str的区别1、http://blog.csdn.net/szchtx/article/details/10396149char ss[]="C++"; ss[0]='c'; // 合法char *p="C++"; p[0]='c'; // 合法但不正确该段代码在VS2010下编译可以通过,但是...转载 2018-06-29 10:37:17 · 214 阅读 · 0 评论 -
c++多态实现的机制
1 什么是多态?多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决定调用的机制程序实现上是这样,通过父类指针调用子类的函数,可以让父类指针有多种形态。2 实现机制举一个例子:#include <iostream.h>class animal{public:void sleep(){cout<<"animal sleep"<<endl;}void...转载 2018-07-05 22:03:32 · 275 阅读 · 0 评论 -
数组的快速排序,手撸一遍
c++:int Partition()函数实现选择一个数字,将小于这个数的数字放在该数的左边,大于这个数的放在该数的右边int Partition(data[],int length,int start,int end){if(data==NULL||length<=0||start<0||end>0){throw new std::exception("wuxi...原创 2018-07-19 17:18:08 · 601 阅读 · 0 评论 -
C语言中值传递、指针传递和引用传递
在C语言中值传递、指针传递和引用传递这三种函数参数传递方式是比较基本的知识,用的比较普遍,但不仔细分析其实质的话,时间长容易记混了。网上的资料也较多但多数都不系统,本文力求用最白话的表达和简单的示例把这三种方式描述清楚。没时间看分析的直接看简述就可以了。简述值传递就是最普通的传递方式,比如函数定义为fun(int a),在调用的地方有int x=6, 使用fun(x)就可以了。这种方式在fun(i...转载 2018-07-07 19:42:12 · 17713 阅读 · 5 评论 -
const volatile int i = 10
两者同时修饰一个对象的典型情况,是用于驱动中访问外部设备的只读寄存器。const和volatile放在一起的意义在于:(1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。“volatile”的含义是“请不要做没...转载 2018-07-07 20:07:51 · 226 阅读 · 0 评论 -
getline()函数详解
学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下: int main(){ string line: while(getline(cin,line)) cout<<line<<endl; ret...转载 2018-08-14 15:38:33 · 21800 阅读 · 3 评论 -
Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的...转载 2018-08-29 11:19:44 · 93 阅读 · 0 评论 -
c\c++函数指针和指针函数的不同
指针函数指针函数为返回指针的函数,真实为一个函数。int *fun(int x,int y);示例typedef struct _Data{ int a; int b;}Data//指针函数Data* f(int a int b){ Data * data = new Data; data->a=a; data->b = b; ret...原创 2019-08-02 17:16:36 · 265 阅读 · 0 评论 -
华为编程规范-排版
https://blog.csdn.net/ce123_zhouwei/article/details/8885868原创 2019-08-01 16:34:23 · 1536 阅读 · 0 评论 -
[leetcode]226. Invert Binary Tree
Invert a binary tree.Example:Input: 4 / \ 2 7 / \ / \1 3 6 9Output: 4 / \ 7 2 / \ / \9 6 3 1Trivia:This problem was inspired by this original tweet by Max...原创 2018-07-10 15:22:43 · 96 阅读 · 0 评论 -
在 x86 系统下,输出的值为多少?
在 x86 系统下,输出的值为多少?在 x86 系统下,输出的值为多少?#include <stdio.h>intmain(){inta[5]={1,2,3,4,5};int*ptr1=(int*)(&a+1);int*ptr2=(int*)((int)a+1);printf("%x,%x",ptr1[-1],*ptr2);return0;}&a+1 指向的是下一个大小...原创 2018-07-08 15:33:09 · 1180 阅读 · 0 评论 -
size = 8 * sizeof(int)是什么意思?详解代码为啥这么写?
我们可以sizeof一下我们自己的电脑上int型占几个字节。我的是4个字节,也就是说只有32个位。如果一个十进制数转位二进制数位数大于32,就溢出,其实也就是存不下了。...原创 2018-06-11 12:58:36 · 5747 阅读 · 0 评论 -
c++利用greater快速排序
greater表示内置类型从大到小排序,less表示内置类型从小到大排序。#include <iostream>#include<algorithm>//sort函数的头文件#include<functional>//greater/less的头文件using namespace std;int main() { int a[10]={0}; int...原创 2018-06-05 09:46:33 · 4970 阅读 · 0 评论 -
c++中,vector
在在c++中,vector是一个十分有用的容器。作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。特别注意:使用vector需要注意以下几点:1、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效...原创 2018-06-05 10:03:36 · 127 阅读 · 0 评论 -
qsort
C/C++中有一个快速排序的标准库函数 qsort ,在stdlib.h 中声明,其原型为:void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *)); 使用该函数,可以对任何类型的一维数组排序。该函数参数中,base 是待排序数组的起始地址,nele...原创 2018-06-06 13:53:53 · 2147 阅读 · 0 评论 -
虚函数
l 虚函数是一种在基类定义为virtual的函数,并在一个或多个派生类中再定义的函数。虚函数的特点是,只要定义一个基类的指针,就可以指向派生类的对象。注:无虚函数时,遵循以下规则:C++规定,定义为基类的指针,也能作指向派生类的指针使用,并可以用这个指向派生类对象的指针访问继承来的基类成员;但不能用它访问派生类的成员。l 使用虚函数实现运行时的多态性的关键在于:必须通过基类指针访问这些函数。l ...转载 2018-06-21 10:37:58 · 582 阅读 · 0 评论 -
函数重载
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:void swap1(int *a, int *b); //交换 int 变量的值void swap2(floa...转载 2018-06-21 10:42:14 · 213 阅读 · 1 评论 -
sealed 关键字
sealed的中文意思是密封,故名思义,就是由它修饰的类或方法将不能被继承或是重写。 sealed关键字:在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。相当于Java中的final类和final方法密封类:密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它类的基类,C#将提示出错。在哪些场...转载 2018-06-21 15:28:20 · 601 阅读 · 0 评论 -
析构函数
设计一个类时,如何写析构函数? 析构函数如果我们不写的话,C++ 会帮我们自动的合成一个,就是说:C++ 会自动的帮我们写一个析构函数。很多时候,自动生成的析构函数可以很好的工作,但是一些重要的事迹,就必须我们自己去写析构函数。 析构函数和构造函数是一对。构造函数用于创建对象,而析构函数是用来撤销对象。简单的说:一个对象出生的时候,使用构造函数,死掉的时候,使用析构函数。下面我们来做一个例子,看看...转载 2018-06-21 15:36:01 · 918 阅读 · 0 评论 -
c++ set集合的使用方法详解
set集合是c++ stl库中自带的一个容器,set具有以下两个特点:1、set中的元素都是排好序的2、set集合中没有重复的元素常用操作:begin() 返回set容器的第一个元素的地址end() 返回set容器的最后一个元素地址clear() 删除set容器中的所有的元素empty() 判断set容器是否为空max_size() 返回set容器可能包含的元素最...转载 2018-05-31 11:20:03 · 2234 阅读 · 0 评论 -
C++中的STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识...转载 2018-05-31 11:22:25 · 52181 阅读 · 0 评论 -
树的左旋与右旋
下图所示操作称为对结点Q的右旋,对结点P的左旋。二者互为逆操作。简单讲,右旋——自己变为左孩子的右孩子;左旋——自己变为右孩子的左孩子。[cpp] view plain copy#include class BinTree{ private: typedef struct node{ int data; node*lchild,*rchild,...转载 2018-06-01 14:45:17 · 622 阅读 · 0 评论 -
栈内存和堆内存的区别
总结:1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等2 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。除了这两部分,还有一部分是:3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。转自:栈内存和堆内存的区别(一个笔试题的一部分)http://blog.cs...转载 2018-06-15 17:26:53 · 128 阅读 · 0 评论 -
红黑树
https://blog.csdn.net/sun_tttt/article/details/65445754原创 2018-06-01 16:59:40 · 135 阅读 · 0 评论 -
理解一般指针和指向指针的指针
理解一般指针和指向指针的指针relation:http://blog.csdn.net/g200407331/article/details/52610175在说指向指针的指针之前,不得不说指向变量的指针。先看如下示例:1. 指向整型指针先看如下示例:View Code 1 #include <iostream> 2 using namespace std; 3 4 int main...转载 2018-06-29 17:32:43 · 104 阅读 · 0 评论 -
c++ ostream
ostream是output stream的简称,即输出流。在C++中用来输出。一个典型的输出流对象就是在C++中标准输出流cout。在C++中,很少自定义ostream的对象,更多的是直接使用cout。ostream这个类型,往往出现在<<操作重载中,作为某个类的友元函数出现。比如对于class A, 可以定义ostream & operator << (ostr...原创 2018-07-01 11:45:58 · 14800 阅读 · 0 评论 -
pop_heap(), push_heap()
对make_heap(), pop_heap(), push_heap()的用法做个总结: make_heap()生成堆,他有两个参数,也可以有三个参数,前两个参数是指向开始元素的迭代器和指向结束元素的下一个元素的迭代器。第三个参数是可选的,可以用伪函数less()和greater()来生成大顶堆和小顶堆,其中type为元素类型。如果只传入前两个参数,默认是生成大顶堆。 push_heap()是在...原创 2018-07-01 17:38:20 · 741 阅读 · 0 评论 -
Deque容器的使用方法
容器deque和vector非常相似,操作函数基本一致。它采用动态数组来管理元素,提供随机存取,可以在头尾两端进行快速安插和删除元素操作。特别要注意,除了头尾两端,在任何地方安插与删除元素,都将导致指向deque元素的任何pointers references iterators 失效。 包括的头文件为:#include <deque>using namespace std; ...转载 2018-05-26 13:42:30 · 373 阅读 · 0 评论