![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
晨哥是个好演员
nothing is impossible
展开
-
浅谈char类型的范围
在C语言中我们知道signedchar类型的大小范围是-128~127.signed char类型占了1个字节(=8位),我们知道有一种可以计算数据类型范围的公式是整型范围公式:-2^(n-1)~2^(n-1)- 1,那么signed char类型的范围就是-2^7~2^7-1. 同样的对于无符号unsigned char类型所表示的数值范围可用二进制表示换即为:0000 00原创 2017-04-18 10:05:45 · 2117 阅读 · 0 评论 -
void空类型指针仅传地址无指向操作
#include <stdio.h> #include <stdlib.h> int main() { //void * 指针类型:指向空类型或不指向确定的类型数据的指针。 void *p1=NULL; int a=3; p1=&a;//p1得到a的纯地址,但并不指向a,不能通过*p1操作a //printf("p1=%d,*p1=%d\n",p1,*p1);不原创 2017-08-19 22:37:32 · 339 阅读 · 0 评论 -
const和volatile详解
转载前注明出处,欢迎转载分享const详解:const可以修饰变量,数组,指针,还可以修饰函数。const修饰变量:const修饰的变量为只读变量,不能给只读变量直接赋值(即const修饰的变量不能出现在等号左边),但是可以通过指针访问这一块内存区域然后间接修改该值。const修饰数组:C中const修饰的数组是只读的,const修饰的数组空间不可被改变(即数组内存放的值)。代码如原创 2017-04-18 10:06:06 · 1829 阅读 · 0 评论 -
编译预处理
转载前注明出处,欢迎转载分享程序执行前程序执行前经历了:预处理器->编译器->汇编器->链接器 1)预处理过程:处理所有注释,以空格代替将所有#define删除,并展开所有宏定义处理条件编译指令#if,#ifdef,#elif,#else,#endif处理#include,展开被包含的文件保留编译器需要使用的#pragma指令预处理指令:1原创 2017-04-18 10:06:24 · 466 阅读 · 0 评论 -
bitset类基本用法
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:#include <bitset>using std::bitset;bitset定义原创 2017-11-11 15:54:39 · 623 阅读 · 0 评论 -
C++继承构造原则
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。构造原则如下:如果子类没有定义构造方法,则调用父类的无参...转载 2019-02-22 21:25:05 · 790 阅读 · 1 评论 -
C++虚继承中的菱形继承的简单解决
在C++继承中考虑这样一个关系: B与C都是从相同的基类派生的,该基类称为A,然后D多重继承了B和C,因为B和C都包含了A的子对象。所以C包含了A的两个子对象。继承关系如下图:从继承图形状上看,有时该继承层次结构称为菱形。没有菱形时,多重继承相当简单。但是只要菱形一出现,由于新类中存在重叠的子对象。麻烦就开始了。重叠的子对象增加了存储空间。这种额外开销是否成为一个问题取决我们的设计,但是问题的...转载 2019-02-23 12:28:48 · 1453 阅读 · 0 评论 -
重载、重写、重定义
重载(overload),重写(override,也称覆盖), 重定义(redefine,也称隐藏)(PS:第三个我不确定在英文中是否应该称为redefine,如有问题,留言告知,谢谢)一、重载(overload) 指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。 (1)相同的范围(在同一个作用域中) ; (2)函数名字相同; (3)参数不同; (4)virtual...原创 2019-02-24 00:42:54 · 950 阅读 · 0 评论 -
函数对象、谓词概念、内建函数对象
1.函数对象的概念重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载"()"操作符,使得类对象可以像函数那样调用注意:函数对象(仿函数)是一个类,不是一个函数函数对象(仿函数)重载了"()"操作符使得它可以像函数一样调用#include <iostream>#includ...转载 2019-02-26 11:42:46 · 360 阅读 · 0 评论 -
C++构造函数为什么不能是虚函数
原因1:从存储空间角度这里你需要知道一个概念,那就是虚函数表vtbl,每一个拥有虚成员函数的类都有一个指向虚函数表的指针。对象通过虚函数表里存储的虚函数地址来调用虚函数。那虚函数表指针是什么时候初始化的呢?当然是构造函数。当我们通过new来创建一个对象的时候,第一步是申请需要的内存,第二步就是调用构造函数。试想,如果构造函数是虚函数,那必然需要通过vtbl来找到虚构造函数的入口地址,显然,我们申...原创 2019-02-26 17:46:20 · 1774 阅读 · 0 评论 -
str函数源码
原文地址:http://blog.csdn.net/xingerr/article/details/702572341、strcpy函数原型:char * strcpy(char * destin, const char * source)作用:把source指向的字符串拷贝到destin指向的字符串中代码:char * my_strcpy(char * destin, const char转载 2017-05-16 21:34:11 · 445 阅读 · 0 评论 -
socket基础之c/s通信过程
socket可以看成是用户进程与内核网络协议栈的编程接口,socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程通信。 这里所说的不同主机例如手机与PC的通信,为什么说手机与PC为不同主机?只是因为其外观不同吗?不是的,首先手机与PC的软件不同,其次是两者的硬件架构不同,手机采用的是ARM架构而PC大多是x86的架构(至于这两者架构有什么区别,博主现在还不了解,待后续补充,先自行原创 2017-04-23 13:16:59 · 4116 阅读 · 0 评论 -
动态申请内存及相关补充
转载前注明出处 欢迎转载分享void*malloc(int size);对于malloc来说,如果不能分配空间,那么返回NULL,如果请求空间大小为0即malloc(0),则返回NULL或一个有效的指针。void*calloc(int n, int size);函数返回值为void型指针。如果执行成功,函数从堆获得size*n的字节空间,并返回该空间的首地址。若执行失败,函数返回原创 2017-04-18 10:06:27 · 562 阅读 · 0 评论 -
结构体及柔性数组
转载前注明出处,欢迎转载分享结构体:大小:结构体的大小不是说结构体中的每个变量的数据类型之和就是结构体的大小,而是按照内存对齐的方式来计算的。123456789struct test{ char a; int b; char c; char *d; short e; long long f原创 2017-04-18 10:06:09 · 1542 阅读 · 0 评论 -
gcc与g++的区别(转贴)
原文地址:gcc与g++的区别(转贴)作者:BigSam78Sam在上一篇帖子中提到:当使用xxx.c.并使用gcc编译时,会有重定义无法检测出来的现象。今天学习一下gcc与g++的区别。Sam之前在leadtek作嵌入式时,与Milong谈过gcc与g++的区别,曾认为gcc就是C方式编译,g++就是C++方式编译。现在才知道是不对的。误区一:gcc只能编译c代码,g++只能编译c+转载 2017-04-18 10:06:19 · 299 阅读 · 0 评论 -
Googletest测试框架搭建方法
转载前注明出处欢迎转载分享网上有很多类似的步骤,我简要说明下我自己在Linux-centos6.8下的安装步骤:1.下载包首先去google官方的github下载1.6.0版本的zip包,当然也有1.7.0或其他版本,而且不仅仅是zip包,还有tar包,我这里按照我的执行方法,我下载的是zip包,方法如下:1wget https://github.com/原创 2017-04-18 10:06:43 · 5869 阅读 · 0 评论 -
浅谈switch和if的细节
前两天朋友问我switch语法的时候我在switch用法上有些含糊,今天写篇博文梳理一下,如有各路大神前来,给小弟指出,必虚心接受。 好了闲话不多说了,进入正题我们先来看下这段错误代码:#include < stdio.h >void main(){ double p = 0, w = 0; int flag = 0; scanf("%lf", &w);原创 2017-04-23 12:46:11 · 1793 阅读 · 0 评论 -
数据类型及auto、static、register…
转载前注明出处,欢迎转载分享。说到C中的数据类型,大家都知道,int,short,char等等。数据类型可以理解为固定内存大小的别名。数据类型是创建变量的模子。就像做蛋糕一样,我们都会用一个模子去压蛋糕来让它得到期望的样子。那什么是变量?上图是内存图:当我们讨论某块内存区域存储的值时,我们不可能总是说2000到2002地址上存储的值是多少多少吧,鉴于如此麻烦的表述,于是我们为了方原创 2017-04-18 10:06:03 · 1964 阅读 · 0 评论 -
C语言符号技巧总结
转载前注明出处,欢迎转载分享接续符:\可以作为接续符和转义符,当作为接续符(\)使用时:编译器会将反斜杠剔除,跟在反斜杠后面的字符自动解到前一行在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格接续符适合在定义宏代码块时使用来看如下代码: C Code 12345678910111213141516171原创 2017-04-18 10:06:14 · 398 阅读 · 0 评论 -
对C/C++内存分配的思考与总结
转载前注明出处,欢迎转载分享下图为操作系统内存地址空间图:在C/C++中通常可以把内存划分为:栈、堆、自由存储区、全局(静态)存储区、常量存储区一个C/C++编译的程序占用的内存分为以下部分:1.栈(stack):存储局部变量,函数参数,返回地址等。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指原创 2017-04-18 10:06:00 · 303 阅读 · 0 评论 -
C/C++的mem函数和strcpy函数的区别和应用
mem系列函数是面试的时候常考的知识点,我们需要熟练掌握这三个函数的原理和代码实现,要能准确无误的写出代码。memcpy、memset和memmove三个函数在使用过程中,均需包含以下头文件://在C中#include <string.h>//在C++中#include <cstring>memcpymemcpy函数是C/C++中的内存拷贝函数,它的功能是从...原创 2019-02-26 20:41:51 · 227 阅读 · 0 评论