C/C++
小海歌哥
这个作者很懒,什么都没留下…
展开
-
C/C++函数指针(typedef简化定义)
学习要点: 1,函数地址的一般定义和typedef简化定义; 2,函数地址的获取; 3,A函数地址作为B函数参数的传递; 函数存放在内存的代码区域内,它们同样有地址.如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 定义一个指向函数的指针转载 2014-10-22 20:50:18 · 535 阅读 · 0 评论 -
C++ vector用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout(5)使用迭代器访问元素.vectorint>::iterator it;for(it=ve转载 2016-01-28 09:34:53 · 1007 阅读 · 0 评论 -
ostream& operator << (ostream& os, Point& pt)
为什么这么写ostream& operator 而不写成ostream operator ostream&这个返回值类型用定义成别名的形式吗??在网上找到了答案如下:如果写成这样ostream operator 则:Point a, b;cout错误,只能写为:coutcout原因在于cout相当于:(cout第一个(原创 2015-05-28 13:52:22 · 10832 阅读 · 2 评论 -
C++三大函数(The Big Three)
C++三大函数:析构函数复制构造函数operator=析构函数函数模样:~S()当一个对象超出作用域或执行delete的时候,析构函数就被调用。复制构造函数函数模样:S(const S& s)以下情况,复制构造函数均会被调用:声明的同时初始化:S s1 = s2; //注意此时虽然出现=,但是不是调用operator=哦S s1(s2);转载 2016-05-19 15:00:50 · 1453 阅读 · 0 评论 -
理解一般指针和指向指针的指针
在说指向指针的指针之前,不得不说指向变量的指针。先看如下示例:1. 指向整型指针先看如下示例:View Code运行结果如下:我们先看下内存分配图:由上图可以清楚的知道,输出整形变量a的值是5,指针变量p的值是001BFD18,而*号的作用是取值,*p即取地址001BFD18中存放的值,即5。2. 指向字符型指针先转载 2016-05-19 19:03:00 · 264 阅读 · 0 评论 -
C++中this指针的理解和用法
关于this指针的一个精典回答:当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子你是看不到全貌了。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向你这个实例本身。 个人理解:(ps:class类就好比这座房子,this就好比一把钥匙,通过钥匙来打开了这座房子的门,那么里面的东西就随意你取用了)原创 2016-06-30 09:23:41 · 33469 阅读 · 12 评论 -
C++转换构造函数和类型转换函数
今天是第一次听到C++还有个转换构造函数,之前经常见到默认构造函数、拷贝构造函数、析构函数,但是从没听说过转换构造函数,隐式转换函数也是一样,C++的确是够博大精深的,再次叹服! 其实我们已经在C/C++中见到过多次标准类型数据间的转换方式了,这种形式用于在程序中将一种指定的数据转换成另一指定的类型,也即是强制转换,比如:int a = int(1.23),其作用是将1.2转载 2016-07-01 10:39:48 · 1132 阅读 · 2 评论 -
c标准基本库函数:libc、glibc和glib的关系
【glibc 和 libc】 glibc 和 libc 都是 Linux 下的 C 函数库。 libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。 ANSI C 和 GNU C 有什么区别呢? ANSI C 函数库是基本的 C 语言函数库,包含了 C 语言最基本的库函数。这个库可以根据头文件划分为 1转载 2016-07-03 12:10:59 · 8110 阅读 · 0 评论 -
gcc学习(一)[第二版]
gcc简介1、 gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器(GNU C Compiler),作者为Richard Stallman,是GNU项目的奠基者;现在已经支持多种语言,如C、C++、Java、Pascal、Ada、COBOL语言等 。 2、主要特征:gcc是一个可移植的编译器,支持多种硬件平台,甚至对Don Kn转载 2016-07-04 10:05:22 · 364 阅读 · 0 评论 -
C++数组、指针与vector、iterator
今天有点闲,于是打开电子版的>来看。其中9.2节有一个表9.4,它指出了vector 和 deque类型迭代器支持的操作。这本来是很平常的,但是表中的iter1+iter2引起了我极大的兴趣。于是写了下面一段代码来验证是否真的能支持这运算#include #include using namespace std;int main(){ vector vec(10);转载 2016-07-04 19:32:30 · 1888 阅读 · 0 评论 -
函数指针和typedef 的用法(附例子)
1.简单的函数指针的应用形式1:返回类型(*函数名)(参数表) [cpp] view plain copychar (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; //ps:小海注解:也可以写成pFun转载 2016-07-04 21:21:06 · 547 阅读 · 0 评论 -
C++ 重载(overload)、重写(overrride)、重定义(redefine)总结
先来看几个概念:重载(overload),重写(override,也称覆盖), 重定义(redefine,也称隐藏)(PS:第三个我不确定在英文中是否应该称为redefine,如有问题,留言告知,谢谢)一、重载(overload)指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。(1)相同的范围(在同一个作用域中) ;(2)函转载 2016-05-29 10:32:33 · 1030 阅读 · 0 评论 -
c++中的函数对象与函数指针学习
篇一、函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数(经常用于函数回调中)。函数指针的声明方法:数据类型标志符 (指针变量名) (形参列表); //函数返回值类型 (*指针变量名) (函数形参列表)一般函数的声明为:原创 2016-07-08 09:12:46 · 358 阅读 · 0 评论 -
C++模板:究竟什么是特化?
我已经制定了一个计划,希望可以定期地在博客上更新文章。我将探讨编译器如何处理模板等这类有意思的事情,并佐以实例。作为一个编译器开发人员,我倾向于用一些小的例子来显示或者测试编译器是如何工作的,而不是来指导你如何在一个应用程序中使用编译器的某个功能。或许会有些人觉得这是有趣的事情。关于这个话题,我有很多想法,也希望大家能多提供建议。我觉得比较有意思的一件事是编转载 2016-07-30 09:47:28 · 924 阅读 · 0 评论 -
C++空类编译器自动生成的6个成员函数
一、问题 在C++中,编译器会为空类提供哪些默认成员函数?分别有什么样的功能呢? 二、详解1、空类,声明时编译器不会生成任何成员函数 对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符。 有时可能会以为编译器会为空类生成默认构造函数等,事实上是不会的,编译器只会在需要的时候生成6个成员函数:一个缺转载 2016-08-05 15:03:05 · 660 阅读 · 0 评论 -
指针函数与函数指针的区别
一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函转载 2015-12-27 19:30:33 · 375 阅读 · 0 评论 -
经典排序算法 - 归并排序Merge sort
经典排序算法 - 归并排序Merge sort原理,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组举例无序数组[6 2 4 1 5 9]先看一下每个步骤下的状态,完了再看合并细节第一步 [6 2 4 1 5 9]原始状态第二步 [2 6] [1 4] [5 9]两两合转载 2015-11-01 15:32:20 · 550 阅读 · 0 评论 -
数组(一维、二维、三维)的动态申请及用vector的表示方法
变长一维数组这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做:#includeusing namespace std;int main(){int len;cin>>len;//用指针p指向new动态分配的长度为len*sizeof(int)的内存空转载 2015-09-21 19:13:10 · 1928 阅读 · 0 评论 -
C:函数指针解读
函数指针从名子上看就知道它也是一种指针,一个指向函数入口地址的指针,举个简单的例子来看看函数指针的用法。 1、通过函数指针调用函数。[cpp] view plaincopyprint?#include #include int Sum(int a, int b) { return a + b转载 2015-02-19 21:30:26 · 407 阅读 · 0 评论 -
C编译时`true' undeclared (first use in this function)
在编译C语言时有时会遇到这样的错误提示:`true' undeclared (first use in this function) or `false' undeclared (first use in this function)就是说 bool, true, false 都是undeclared,原因很简单,因为真正的C中没有这些关键字,c和早期的c++里没有关键字boo转载 2015-02-27 22:00:48 · 16792 阅读 · 0 评论 -
二维数组指针
概括的说,指针其实就是可变数组的首地址,说是可变数组,是 指其包含内容的数量的可变的,并且是可动态申请和释放的,从而充 分节约宝贵的内存资源。我一向喜欢一维数组,除非万不得已,我一 般是不用二维数组的,多维的则更是很少涉足了。因为一维简单,容 易理解,而用指针指向的多维数组就具有相当的复杂性了,也因此更 具有讨论的必要。 闲话少说,这里我就以三个二维数组的比较来展开转载 2015-03-08 21:48:00 · 407 阅读 · 0 评论 -
指针与指针数组
很多人以为“指向数组的指针”就是“指向指针的指针”,于是有人写这样的代码:int a[3][4];int **p = a;//错误 这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C++中严格说来没有二维数组。那么,你要用一个指针来记录a,就要用一个能表示“数组的数组”的指针,以下代码是正确的:int (*p)[4] = a;//正确 只有转载 2015-03-09 15:35:19 · 336 阅读 · 0 评论 -
数组指针 和 指针数组
最近发现公司有些人说怎样区分 数组指针 和 指针数组 ? 其实 很简单;数组指针, 先是(定语 ) (主体), (定语 数组) + (主体 指针) ,就说明, 这是一个指针 (主体 指针), 指向的是一个 (定语 数组);例如:int a[3][4];int (*p)[4] = a; // p 是数组指针, p指向的是a转载 2015-03-17 21:32:58 · 436 阅读 · 0 评论 -
错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
在VS安装目录搜索cvtres.exe D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin 将第二个目录下的cvtres.exe文件删掉。即可正常编译。原创 2015-04-10 20:35:42 · 404 阅读 · 0 评论 -
source insight的中文删除解决办法,以及中文间距大的问题
①将文件SuperBackspace.em放到软件安装的根目录下面,再复制一份到(我的电脑中的目录是:)D:\Documents\Source Insight\Projects\Base目录下(下载网址:http://pan.baidu.com/s/1o6qltpC)或者自己写如代码也可以代码如下:macro SuperBackspace(){ hwnd = GetCurrent原创 2015-04-12 14:39:58 · 1533 阅读 · 0 评论 -
malloc()与calloc区别
1.分配内存空间函数malloc 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100原创 2015-04-08 21:25:59 · 4890 阅读 · 0 评论 -
_C_#ifdef
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2转载 2015-05-08 18:26:56 · 363 阅读 · 0 评论 -
浅谈C++多态性
C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定转载 2015-08-24 22:19:37 · 292 阅读 · 0 评论 -
C语言的内联函数的作用
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。[cpp] view plaincopyvoid myprin转载 2015-08-26 22:46:56 · 534 阅读 · 0 评论 -
char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][], and so on
本文测试环境 : X86-64 bit 架构的服务器CentOS x64 5.xgcc version 4.1.2 20080704指针和数组是C的比较难搞懂的知识点, 需要结合内存来学习, 非常感谢各位兄弟为我指点迷津.下面总结一下 : 首先说明一下C程序在运行时, 不同的内容或变量分别存储在什么地方?分了几块区域分别是, code转载 2015-08-14 10:26:14 · 371 阅读 · 0 评论 -
C++的头文件(.h)和实现文件(.cpp)分别写什么
原文链接:http://www.cnblogs.com/ider/archive/2011/06/30/what_is_in_cpp_header_and_implementation_file.html在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。对于以转载 2015-09-01 09:23:57 · 4416 阅读 · 0 评论 -
C++中内存对齐
源地址:http://www.cppblog.com/cc/archive/2006/08/01/10765.html 在我们的程序中,数据结构还有变量等等都需要占有内存,在很多系统中,它都要求内存分配的时候要对齐,这样做的好处就是可以提高访问内存的速度。 我们还是先来看一段简单的程序: 程序一转载 2015-09-16 22:54:26 · 332 阅读 · 0 评论 -
《剑指offer》-构建乘积数组
题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。解法:方法1:暴力解法。1)假设A=[1,2,3],那么B[0] = A[1]*A[2] B[1] = A[0]*A[2] B[2] =原创 2016-09-01 11:32:01 · 367 阅读 · 0 评论