![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
hz951290428
这个作者很懒,什么都没留下…
展开
-
指针和引用
指针和引用结论:引用指针必须初始化可以不初始化不能为空可以为空不能更换目标可以更换目标1、引用必须初始化,而指针可以不用初始化。2、引用不能为空,而指针可以为空。3、引用不能更换目标,而指针可以随便指向任何地方。指针和引用的性能比较:指针与引用之间有没有性能差距呢?这种问题就需要进入汇编层面去看一下。我们先写一个test函数,参数传递使用指针:void test(int* p){ *p = 3; return;}(gd原创 2020-08-22 17:37:43 · 690 阅读 · 0 评论 -
moalloc/free和new/delete的区别
1、malloc与free是C/C++的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2、new/delete是运算符用于对象内存申请和释放,当对象构造和析构的释放调用new/delete。3、malloc/free是库函数,不在编译的控制范围内。不能把对象的构造和析构强加于malloc/free上。看如下例子:#include <iostre...原创 2020-01-30 15:18:46 · 267 阅读 · 0 评论 -
Linux经典好文
聊聊Linux IO:https://0xffffff.org/2017/05/01/41-linux-io/聊聊原子变量、锁、内存屏障那点事:https://0xffffff.org/2017/02/21/40-atomic-variable-mutex-and-memory-barrier/Linux环境下多线程C/C++程序的内存问题调试https://0xffffff.org/2...原创 2020-01-27 14:51:50 · 127 阅读 · 0 评论 -
宏预处理
1、宏定义// THE_NUM 宏定义为3#define THE_NUM 32、宏函数#define MAX(A,B) A>B?A:B但是这个宏有一个缺点。 当调用比如MAX(3,2)*2时会出现不想要的结果。 MAX这种形式是留给实现的。 综上,修改如下:#define MAX(A,B) ((A)>(B)?(A):(B))宏函数没有做类型检查,int,原创 2016-07-06 14:40:27 · 323 阅读 · 0 评论 -
Linux下安装ffmpeg
1、官网下载ffmpeg http://www.ffmpeg.org/download.html API文档入口:http://www.ffmpeg.org/doxygen/2.0/index.html2、安装和验证:./configure --enable-shared --prefix=/xxx/ffmpegmakemake install 出现如上错误的...原创 2018-03-27 17:17:52 · 8302 阅读 · 0 评论 -
fprintf和sprintf的区别
fprintf和sprintf的区别1、fprintf:格式化输出到流(stream)文件中,返回值是输出的字符数,发生错误时返回一个负值. #include <stdio.h> int fprintf( FILE *stream, const char *format, ... );2、sprintf:格式化输出发送到buffer(缓冲区)中.返回值是写...原创 2018-03-28 20:04:47 · 4572 阅读 · 0 评论 -
C++简单实现C/S模型
Server.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <strings.h>#include <string.h>#include <ctype.h>#include <arpa/inet.h>#define SERV_PORT 9988int转载 2018-04-11 19:53:08 · 3295 阅读 · 1 评论 -
Linux系统编程之进程
1、进程控制块=进程描述符(PCB)进程状态(4/5种):就绪(初始化),运行,挂起(=等待), 停止 PBC成员: 1、进程id 2、进程状态 3、进程切换需要保存和恢复的CPU寄存器 4、描述虚拟地址空间信息 5、描述控制终端的信息 6、当前工作目录 7、umask掩码 8、文件描述符 9、信号相关的信息 10、用户和用户组id 11、会话(session)和进程组...原创 2018-04-18 13:46:08 · 407 阅读 · 0 评论 -
内核两个经典宏剖析:offsetof和container_of
1、宏:offsetof#ifndef offsetof#define offsetof(TYPE, MEMBER) ((size_t)&(TYPE*)0)->MEMBER)#endif2、宏: container_of#ifdef container_of#define container_of(ptr, TYPE, MEMBER) ({ const typeof(...原创 2019-03-19 00:22:53 · 142 阅读 · 0 评论 -
Linux C++提升知识图谱
原创 2019-04-04 07:41:03 · 330 阅读 · 0 评论 -
链表操作
链表操作#include <stdio.h>#include <stdlib.h>#include <string.h>/* 结构体 */typedef struct node{ int data; struct node *next;} NODE_S;/* 创建一个节点 */NODE_S* create_node(in...原创 2019-06-26 08:08:40 · 206 阅读 · 0 评论 -
简单实现二分法
1、简单实现二分法int binarySearch(int a[], int len, int key){ int low = 0; int heigh = len-1; int n = 0; while(low <= heigh){ n++; int mid = (low + heigh) / 2;原创 2019-07-01 22:28:42 · 447 阅读 · 0 评论 -
C++基础之构造函数
1、构造函数 构造函数的作用: 类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员下面看个简单经典的例子: 如下代码分别输出的结果是什么?#include using namespace std;class A{public: A() { cout原创 2018-01-04 16:00:56 · 183 阅读 · 0 评论 -
GCC编译和GDB调试
一、编译1、gcc编译器 gcc编译器(GNU CC)是GNU项目中符合ANSI C标准的编译系统,是一个强大的编译器。能够编译C/C++,Objective-C等。2、编译流程 1)预处理(Pre-Processing) 对处理头文件(#include)、宏定义(#define、#ifdef)等进行处理。 gcc -E xx.c -o xx.i2)编译(原创 2018-01-09 14:20:12 · 299 阅读 · 0 评论 -
C语言简单实现字符串截取
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef char T[64];void mySplit( char *sStr, char *delims, T t[]){ int i = 0; char *result = NULL; result = strtok( sStr, delims原创 2017-06-19 10:19:26 · 3140 阅读 · 0 评论 -
递归那些事儿
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>//求阶乘int fac(int n){ if(n==1 || n<=0) { n = 1; return n; } if(n>1) { return n原创 2016-07-12 22:46:48 · 197 阅读 · 0 评论 -
pthread线程和线程锁
pthread线程和线程锁线程创建: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);其中: pthread_t *thread表示:线程ID pthread_at原创 2017-06-30 13:07:31 · 682 阅读 · 0 评论 -
函数指针
1、函数与函数指针返回值类型 ( * 指针变量名) ([形参列表]);声明函数:int func(int x);函数指针的声明:int (*fp)(int x);fp = func; //可以将函数首地址付给函数指针fp = &func; //或者:取函数的收地址注意:赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,函数指针fp就原创 2016-07-10 16:49:57 · 284 阅读 · 0 评论 -
C++连接Mysql
1、安装mysql(Ubantu环境下):sudo apt-get mysql-server mysql-client 同时把mysql的客户端和服务端同时安装。安装server时会弹出图形界面,让你设置初始密码。 安装完毕后登陆数据库:mysql -u root -p 输入密码,出现上图则表示登陆成功。2、创建数据库和表: 创建一个数据库:create database test; --原创 2017-12-08 16:39:12 · 368 阅读 · 0 评论 -
C/C++的sizeof('a')和sizeof(char)
#include <stdio.h>int main(){ char b = 'a'; printf("a === %d\n",(int)sizeof('a')); printf("b === %d\n",(int)sizeof(b)); return 0;}猜猜结果是如何:a === 4 b === 1原创 2017-06-08 18:23:43 · 1930 阅读 · 0 评论 -
C++基础之构建String类
C++构建String类: 举个例子如下:#include #include #include using namespace std;class String{public: //String的构造函数 String(const char *str = NULL) { cout "构造函数!" << endl; if(N原创 2018-01-12 09:32:47 · 1013 阅读 · 0 评论 -
C++基础之格式化输出
在C语言里面,使用printf()函数格式化输出。例如printf(“%d-%f-%2.5f”,a,b,c); 但是在C++里面就尴尬了,cout 在C++里面也提供了格式化输出的方法,但是方法比C语言稍微麻烦。C++格式化输出需要引入头文件:#include ,里面提供的方法基本功能与printf()一样,如下两者的对比: 序号 内容 C++ C语言原创 2017-09-29 16:44:57 · 792 阅读 · 0 评论 -
内存和野指针问题
1、内存溢出和内存泄露的区别1、内存溢出(out of memory)指程序在申请内存时候,没有足够的空间供其使用;例如说申请了一个int类型的内存,但是给他存入long型的数据,此时就产生溢出。 2、内存泄露(memory leak)指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,长久以往内存就被占光了。2、内存分配方式内存分配有三种方式: 1、全局存原创 2018-01-04 18:11:23 · 445 阅读 · 0 评论 -
C++基础之深拷贝浅拷贝
1、拷贝构造当一个已构造了的对象要构造新的对象时,拷贝构造函数被调用。也就是对象需要拷贝时,拷贝构造函数就被调用。如一下几个情况: 1)对象以值传递方式传入函数体。 2)对象以值传递方式从函数体返回。 3)新对象要通过一个已构造完成的对象进行构造。 在C++里面都有一个默认的拷贝构造函数。默认的拷贝构造函数是浅拷贝,一般无法满足实际的需求。2、浅拷贝和深拷贝浅拷贝:如果一个原创 2018-01-05 14:28:41 · 185 阅读 · 0 评论 -
C语言面试经典tips
1、循环执行了多少次?#includeint main(){ for(char i=0; i128; i++) { printf("%d\n", i); } return 0;}Question: 循环执行了多少次?? 答: char的范围是: [-128, 127], i2、下列返回值输出( )int func(void翻译 2016-07-08 23:08:13 · 317 阅读 · 0 评论 -
C语言简单实现atoi()函数
直接看代码:#include #include int my_atoi(const char *in){ int tmp = 0; int ret = 0; int sign = 0; //符号标记 if(in[0] == '-'){ //是否为负数 sign = -1; } whil原创 2018-01-31 15:51:46 · 377 阅读 · 0 评论 -
简单的弧度角度转换
简单的弧度角度转换就是这简单:#include <stdio.h>#define M_PI 3.14159#define RAD2DEG(x) ((x)*180./M_PI) //弧度转角度 #define DEG2RAD(x) ((x)*M_PI/180.) //角度转弧度int main(){ printf("RAD2DEG(3.14) = %f\n",RAD2DE原创 2017-05-27 10:38:20 · 9305 阅读 · 0 评论