
c/c++
文章平均质量分 53
路人暴脾气
探索 - 专注 - 坚持
展开
-
UE4控制台命令使用
UE4 对自定义内置的控制台命令提供了多种支持,如下图进行简单的汇总。控制台变量和控制台命令应该尽早的注册给引擎(最好是全局变量),这样引擎才能提供控制台输入自动提示的功能,以及帮助文本的显示Exec 接口是不提供自动提示和帮助文本的支持UObject 的 exec 标记支持自动提示 但是没有帮助文本原创 2021-06-27 22:00:03 · 8957 阅读 · 1 评论 -
windows 内存管理总结
内存管理总结前言一、内存体系结构1. 虚拟地址空间1.1 概述1.2 虚拟地址空间的分区2. 虚拟内存2.1 物理存储器2.2 页面保护属性2.3 写时复制二、操控使用内存1. 虚拟内存2. 内存文件映射3. 堆4. C/C++运行时的内存管理前言关于windows内存管理 官方文档文件映像被分为多个段,比如 .text .data .bss等。每个段其实都有自己的属性:可读、可写、可执行、可共享。一个进程是恶意进程,修改了DLL库的代码段,那么会影响其他加载了该库的进程原创 2020-10-18 14:16:52 · 3427 阅读 · 0 评论 -
动态内存(一)使用动态内存
Pointers or C 英文版翻译原文:11.1 Why Use Dynamic Allocation11.1 为什么使用动态分配 当声明一个数组时,数组的大小必须作为编译期常量被给定。数组真正需要的大小是不知道的,直到运行的时候,因为空间的数量依赖与输入的数据。例如,一个计算学生成绩和平均成绩的程序可能需要储存一个班全部学生的数据,但是不同的班学生的数量不同。这些情况下,通常的方法是声翻译 2017-11-08 17:47:56 · 853 阅读 · 0 评论 -
动态内存(二)calloc 和 realloc && 使用动态内存
Pointers or C 英文版翻译11.3 Calloc and Realloc 另外还有两个内存分配函数,calloc 和 realloc,他们的原型如下:void * calloc(size_t num_elements,size_t element_size);void * realloc(void* ptr,size_t new_size); calloc 也是用来翻译 2017-11-12 00:44:47 · 627 阅读 · 0 评论 -
何为指针(二)未初始化和非法的指针
Pointers or C 英文版翻译原文:6.5 Uninitialized and Illegal Pointers6.5 未初始化和非法的指针 下面这段代码举例说明了一个非常普遍的问题int *a;*a = 12; 声明了一个名为 a 的指针变量,并且把12赋值给了它指向的位置。但是,指针指向哪里呢?我们声明了这个变量,却从来没有初始化它。所以我们没法预测12被存储在哪里。在这翻译 2017-11-04 21:46:51 · 1775 阅读 · 2 评论 -
何为指针(一)认识指针
Pointers or C 英文版翻译原文:3.1.3 Pointers 指针是C语言非常流行的主要原因。指针可以高效的实现一些高级的数据结构,例如树和链表等等。例如像Pascal和 Modula-2 这些语言,虽然实现了指针,但是不允许指针的算术或者比较运算。这些语言也不允许创建已经存在对象的指针。幸运的是C程序员可以使用这些限制去编写比其他语言更加高效和简洁的程序。同时,没有限制的使用C翻译 2017-11-01 18:43:57 · 612 阅读 · 0 评论 -
何为指针(三)空指针
Pointers or C 英文版翻译原文:6.6 The Null Pointer 6.6 空指针 C标准定义了一个NULL指针,其值不指向任何东西的。为了使一个指针变量为UNLL,你把0赋值给它;为了测试指针是否为NULL,你把它和0比较。选择0值是源码约定,在内部,空指针的值实际是上可能有些不同。在这种情况下,编译器负责把0翻译为内部的值。 空指针的概念是十分安全的,因为它给了你指翻译 2017-11-05 23:10:12 · 671 阅读 · 0 评论 -
C/C++ 位运算 常见作用总结
按位与 &快速清零int a=0x0001;a&=0; //a : 0x0000保留指定位int a=0x0111;int b=0x0010;a=a&b; //a : 0x0010 判断奇偶 int a=2;int b=3;//与1按位与a=a&1; // a: 0 偶数值为0 ...原创 2018-03-14 21:51:09 · 6224 阅读 · 1 评论 -
windows(vs2017) 和 ubutun 平台下 使用 protobuf 3.5.1 安装及使用 防坑指南
windows 平台 (vs2017)安装protobuf首先安装cmake CMake:https://cmake.org/download/下载protobuf的C++版本的源代码 https://github.com/google/protobuf/releases 下载 protobuf-cpp-3.5.1.zip 这个包 解压源码 (路径不要带中文)使用cmak...原创 2018-05-05 21:13:50 · 3279 阅读 · 2 评论 -
GCC扩展关键字总结
流水线优化__builtin_expect 将流水线引入cpu,让cpu可以预先取出下一条指令,提高cpu的效率。但是如果遇到跳转语句,提前取出的指令就没用了。So, GCC 提供了这个关键字 用来告诉编译器,跳转到那条分支语句的的可能性大,这样编译器就可以生成高效的汇编代码。__builtin_expect(EXP, N)// 用来指示 Exp == N 的概率...原创 2018-05-30 22:17:23 · 1660 阅读 · 0 评论 -
条件变量 深入理解总结(C++ 11 中的并发库 为例)
理解条件变量条件变量可以用来管理thread间的通信。一个线程可以等待在一个条件变量上,直到发生某个事件。考虑一个场景,一个线程访问一个队列时,发现队列为空,他只能等待 直到其他线程将一个节点添加到队列中。这种情况就需要用到条件变量。(当然,用低效的轮询也可以,不停的去判断队列中是否有节点)C++11 标准库提供的 condition_variable 概览conditio...原创 2018-05-31 21:58:08 · 2898 阅读 · 0 评论 -
敏捷开发笔记 原则篇 OCP [开放 封闭] 原则
描述对于程序的扩展是开放的对于程序牵一发而动全身的更改是封闭的 实现 模块可以操作一个抽象体。由于一个模块依赖一个固定的抽象体,所以抽象体对于更改是关闭的。但是他可以通过派生来达到扩展其行为的目的。 简单的说 符合 OCP 原则的设计 是对一个模块的改动是动过新增加代码实现的,而不是修改原先的代码,不会引起连锁反应。示例假如现在需要绘制图形界面,有圆形...原创 2018-08-05 22:13:08 · 565 阅读 · 0 评论 -
敏捷开发笔记 原则篇 LSP (Liskov 替换原则 )
描述子类型必须能够替换掉他的基类型遵守规则的设计从使用者的角度靠看一个模块 ,一个模块如果孤立的看,并不具有真正的有效性 。模型的有效性只能通过他的客户程序表现。IS - A 的关系是针对模块行为而言的在重新生成的派生类只能使用比原先前置条件范围更广的条件作为前置条件;只能使用比原先后置条件范围更加窄的条件作为后置条件 修正不符合LSP规则的设计用提取公共部分...原创 2018-08-06 19:14:45 · 673 阅读 · 0 评论 -
何为指针(四)指针,解引用和左值
Pointers or C 英文版翻译原文:6.7 Pointers,Indirection,and L-values 6.7 指针,解引用和左值 包含指针的表达式可以用来做左值吗?如果可以的话,是那个?我们回到先前的例子。给出下面的声明:int a;int* d=&a;考虑下面的表达式: 表达式 左值 表达的位置 a yes a d yes d翻译 2017-11-06 22:15:06 · 907 阅读 · 0 评论 -
linux -> C/C++ 目录操作
创建/删除目录#include<sys/stat.h>int mkdir(const char *path_name,mode_t mode);#include<unistd.h>int rmdir(const char *path_name); rmdir要求删除的目录为空目录,当目录非空时会操作失败目录文件的打开/关闭/读取#include<dirent.h>DIR *opendir原创 2017-09-08 18:08:16 · 2420 阅读 · 0 评论 -
c++ 类 实现时钟程序
c++ 类 实现时钟程序 /*******以下程序用VS2013编译通过********//********时钟类*********///文件clock.h#pragma onceclass clock{public: clock(); ~clock(); void run();private: int hours; int min原创 2016-08-02 16:28:30 · 16478 阅读 · 1 评论 -
C/C++ 友元
友元的作用是提高了程序的运行效率,但是他破坏了类的封装性和隐蔽性。友元可以是一个函数,被称为友元函数;也可以是一个类,被称为友元类。原创 2016-09-25 16:42:34 · 569 阅读 · 0 评论 -
c++运算符重载
应用举例:#include <iostream>using namespace std;class Coord{public: Coord(int _x=0, int _y=0) :x(_x), y(_y){}//成员函数 单目运算符重载 Coord operator-() { Coord c; c.x = -原创 2016-09-27 23:55:10 · 463 阅读 · 0 评论 -
VS2013 编译错误提示总结
1. error C2040: “ret”:“int”与“MYSQL *”的间接寻址级别不同 原因: 变量重定义了。原创 2017-02-21 17:33:09 · 889 阅读 · 0 评论 -
蓝桥杯—平方怪圈 算法分析
题目 -------- 平方怪圈如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。请写出这个循环圈中最大的那个数字。请填写该最大数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。原创 2017-03-17 22:44:28 · 5841 阅读 · 0 评论 -
do...while(0)的妙用
转自:http://www.cnblogs.com/flying_bat/archive/2008/01/18/1044693.html在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while转载 2017-06-29 21:19:55 · 370 阅读 · 0 评论 -
Linux下的C++开发之代码的编辑与生成
代码的编辑 开发linux下的c++程序,如果命令行编辑代码显然是不现实的。其实就编辑代码而言,还是在windows上用VS编辑效率高一点。 使用VS编辑代码的思路就是在本地windows上写好代码,让后传到linux上进行编译调试 同步代码文件有两种方法,一种 就是配置SAMBA共享目录,二种是用ftp软件上传文件。第一种只能在局域网搭建,在公网搭建很麻烦(据说可以,原创 2017-07-16 13:57:48 · 1289 阅读 · 0 评论 -
计算机等级考试二级C语言(三)搞定C指针
一、指针是什么 int *pi; pi 是一个指针,其实,它也只过是一个变量而已。与变量并没有实质的区别。 内存地址→6 7 8 9 10 11 12 13 -------------------------------------------------------------------原创 2016-09-02 00:24:01 · 1020 阅读 · 0 评论 -
计算机等级考试二级C语言(一)数据类型及其运算
1.标识符 [1] 命名规则: 由字母 数字 下划线组成,且以字母或者下划线开头 。 eg. _ _a _33 a_ [2]分类 关键字 系统预先定义的 不能做自定义使用 eg. int float double if else 预定义标识原创 2016-08-26 15:29:43 · 1688 阅读 · 0 评论 -
一道二级C题引发的思考-- c++函数传递指针的本质 与 字符串指针与字符数组的区别
函数传递指针只可以改变指针指向的值,并不能改变指针本身!函数传递指针离不开拷贝,只不过传递指针是去拷贝指针(即地址数据),而非拷贝值。- 字符串是常量,不可更改的,在func中`*(string+1) = '\0';`先当与更改一个常量,导致奔溃 - 字符数组显然不是常量,故更改不会导致奔溃。它截取字符串的操作相当于用‘\0’截断了字符串原创 2017-09-22 23:41:21 · 435 阅读 · 0 评论 -
linux -> c/c++ 之文件的基本操作
打开文件/创建文件#include <fcntl.h>int open(const char * path_name,int flag); //打开现有的文件int open(const char *path_name.int flag,mode_t mode); //打开文件,如果文件不存在,则创建他 int create(const char * path_name,mode_t mod原创 2017-09-08 13:11:58 · 482 阅读 · 0 评论 -
C++ const 修饰类的用法
C++ const 修饰类用法 1.修饰数据成员 初始化位置只能在参数列表里面 被const修饰的数据成员不能被修改 2.修饰成员函数 位置 函数申明之后,实现体之前 意义: const承诺不会修改数据成员 能访问const和非const数据成员 但不能修改 非const数据成员 只能访问const原创 2016-08-16 12:28:52 · 2316 阅读 · 0 评论