C/C++
文章平均质量分 65
nice_wen
理想与情怀
展开
-
C语言结构体内存对齐(#prama / __attribute__)
本文测试机器为X86_64架构,系统为ubuntu-16.04 LTS,gcc version 7.4.0一、默认的内存对齐首先,通过一个例子来介绍什么是内存对齐。#include <stdio.h>int main( ){ struct data { float a; char b; int c; }...原创 2019-11-08 20:51:58 · 1150 阅读 · 0 评论 -
C语言变长参数详解
由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正。一、基础部分1.1 什么是可变长参数可变长参数:顾名思义,就是函数的参数长度(数量)是可变的。比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的。下面是 printf 函数的声明:int printf ( const char * format, … );可变参数函数声明方式都是类似的。1.2 如何实...转载 2018-12-10 16:20:38 · 5587 阅读 · 0 评论 -
浮点数比较大小
由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。 最近阅读《剑指offer》,其中有提到浮点数不能直接用 ‘==’比较,之前就有听说这个问题,但一直没有深入理解。今天,查阅了一些资料,对其进行解释,方便日后查阅。一、前言首先来看一个例子:#include <iostream>#include <cmath>using namespac...原创 2018-11-20 11:21:41 · 12368 阅读 · 1 评论 -
继承、隐藏、覆盖和重载的区别
由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。1.父子类继承关系: 子类复制父类全部成员首先,理解父子类的继承关系是怎样发生的。在此基础上就很容易理解它们之间的关系和区别。每一个类有它自己的成员变量和成员函数,是一个独立的空间整体。当子类继承父类时,会将父类的全部成员全部复制一份,作为子类的成员,但是,同时也会标记这些成员是从父类中继承的,与子类本身的成员,还是有...原创 2018-10-21 22:19:16 · 600 阅读 · 0 评论 -
具有子类的类,析构函数尽量定义为虚函数
由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。一、使用new创建对象需要显示的调用Delete来删除对象,否则将造成内存泄漏。代码如下所示#include &amp;amp;lt;iostream&amp;amp;gt;using namespace std;class Test{public: Test(int v = 0) : data(v){ cout &amp;amp;lt;&原创 2018-10-21 15:38:47 · 1805 阅读 · 1 评论 -
虚继承简单介绍
由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。此处只是简单介绍虚继承的概念,具体细节参考其他资料。本文转自https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.cbclx01/cplr134.htmhttps://www.ibm.com/support/knowl...转载 2018-10-22 21:50:46 · 218 阅读 · 0 评论 -
c++虚函数表与虚析构函数
由于本人才疏学浅,本文难免存在遗漏之处,欢迎大家留言指正,本人将感激不尽。很早就听说过虚函数表的概念,但是一直没去深究,今天借这篇文章介绍一下虚函数表,以及析构函数需要定义为虚函数的根本原因。本文转自 https://www.cnblogs.com/shijingjing07/p/5559989.htmlC++虚函数表与虚析构函数1.静态联编和动态联编联编:将源代码中的函数调用解释为要执...转载 2018-10-22 20:43:36 · 934 阅读 · 0 评论 -
NULL、nullptr和0的区别
在进行C/C++编码时,我们经常会用到空指针,这里简单介绍一下NULL、nullptr以及0的区别。一、NULL和0NULL其实就是整数0,头文件中通过宏定义将NULL定义为0。因此,当调用如下代码时,编译将会产生歧义void fun(int v){ printf(&amp;quot;int\n&amp;quot;); return ;}void fun(char *p){ printf(&amp;quot;point\转载 2018-10-19 13:30:49 · 10260 阅读 · 2 评论 -
C++赋值运算符重载函数(operator=)
由于对c++的重载符号一直不是很理解,此处参阅一些资料给出比较详细的解释,方便读者以及自己查阅。例1#include&amp;amp;lt;iostream&amp;amp;gt;#include&amp;amp;lt;cstring&amp;amp;gt;using namespace std;class MyStr{private: char *name = NULL; int id;publi原创 2018-08-13 21:41:32 · 5086 阅读 · 2 评论 -
二维数组作为实参,调用函数,段错误
我相信大家在进行C/C++编程时,都遇到过这样的问题,即需要将二维数组作为实参来调用函数。如下代码所示:#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;void set_char(char *c[]){ c[0][0] = 'b';}int main(){ char c[10][10]; c[0][0] = 'a'; set_char(c); ...原创 2018-05-26 19:08:38 · 2925 阅读 · 0 评论 -
extern关键字
extern只是声明函数或变量,定义在别处。C语言:对于变量和函数的声明来说,加不加extern没区别!对于函数来说,甚至不用提前声明。变量需提前声明。若在多个文件中同时定义同一个变量,则编译通过,但链接报错“存在重复定义额变量”!(可采用extern或static)C++:原创 2017-08-23 19:04:33 · 148 阅读 · 0 评论 -
引用与指针的区别
C++中引用类型与指针类型的区别1.指针是一个对象,引用则不是一个对象,引用只是一个对象的别名。2.指针可以初始化,也可以不初始化,赋值之后可以重新赋值;引用再定义的时候必须初始化,一旦初始化绑定某一对象之后不能重新绑定到其他对象。原创 2016-12-17 20:17:23 · 337 阅读 · 0 评论