C/C++Concept
文章平均质量分 67
端午过后的猪
乌龟小白在路上...慢慢爬 ...
展开
-
assert()
assert() 宏用法注意:assert是宏,而不是函数。在C的assert.h头文件中。assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行. 断言只有在Debug模式下才有效,它可以有两种形式1.assert Expression12.assert Expression1:Expression2其中Expression1应该总是一个布尔值,Express原创 2017-06-29 10:17:33 · 172 阅读 · 0 评论 -
类成员变量的初始化
Class Test{private: int va1; const int va2; static int va3; static const int va4 =4;//静态常成员变量可以直接进行初始化,其它都不可以 public: test(); ~test();} int Test::va3 =3;//静态成员变量正确的初始化方法(原创 2017-06-29 10:15:37 · 206 阅读 · 0 评论 -
双重指针动态开辟内存
a[10][10]你要想用一个指针指向这个多维数组的话那就需要一个双重指针int **p=a; int*a[2]:指针数组int(*a)[2]:数组指针////////////////////////////////////////////////////inta[2]:a是一个数组名int(*a)[2]:a是一个指针,指向int x[2]类型的数组但本质上两者都存的是数组原创 2017-06-29 10:15:28 · 1301 阅读 · 0 评论 -
new和malloc的区别(转载)
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于原创 2017-06-29 10:15:25 · 179 阅读 · 0 评论 -
Myclass method;和Myclass&nb…
直接定义一个类的对象和new一个类的对象的区别: 一、存储空间不同Myclass method:在栈上; Myclass * method = newMyclass:在堆上 二、new创建对象的一些特点new创建类对象需要指针接收,一处初始化,多处使用new创建类对象使用完需delete销毁new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间new对象指针用途原创 2017-06-29 10:15:23 · 401 阅读 · 0 评论 -
#include<>和#include""的区别(转…
首先明白一点:函数的使用都要进行定义和声明的!.h是头文件,头文件是包含函数声明和定义的文件;你平时写C语言时,用到的printf()() 和scanf()都是系统定义好的,而这些函数的定义就包含在stdio.h这个文件中!#include是编译预处理指令,就是在编译前将stdio.h这个文件里的函数都添加到你写的cpp文件中,然后参与编译,生成.obj文件。如果没有这个指令,你用到的pri原创 2017-06-29 10:14:54 · 1001 阅读 · 0 评论 -
指针或引用做为返回值
原文地址:指针或引用做为返回值作者:青青当函数返回指针的时候,返回的是一个地址;比如int *fun(int *p){ (*p)++; returnp;}当函数返回一个引用时,返回的是也一个地址;比如int& func(int& p){ returnp;}当返回引用的时候,函数可以作为左值来使用,也就是说可以实现链式表达式.指针或引用做为返回转载 2017-06-29 10:14:40 · 235 阅读 · 0 评论 -
值传递、指针传递、引用传递…
原文地址:值传递、指针传递、引用传递的区别【转】作者:yanppf最近写了几篇深层次讨论数组和指针的文章,其中提到了“C语言中,所有非数组的形式参数传递均以值传递形式”数组和指针背后——内存角度语义"陷阱"---数组和指针而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~下文会通过例子详细说明哦值传递:形参是实参的拷贝,转载 2017-06-29 10:14:31 · 180 阅读 · 0 评论 -
指针的指针
main(){ char *ps[]={"BASIC","DBASE","C","FORTRAN","PASCAL"}; char **pps; int i; for(i=0;i { pps=ps+i; printf("%s/n",*pps); }} 用指向指针的指针变量 将一批顺序给定的字符串按反序输出。 main()原创 2017-06-29 10:14:28 · 157 阅读 · 0 评论 -
将string转换成char* (转)
原文地址:(转)">将string转换成char* (转)作者:notyme原文:http://hi.baidu.com/ѩŵ_��ʱ����/blog/item/a06a1847c1698a1f9213c664.html string 是c++标准库里面其中一个,封装了对字符串的操作把string转换为char*有3中方法:1.data如:stringstr="abc";char *转载 2017-06-29 10:14:19 · 1399 阅读 · 0 评论 -
函数返回指针
例一:#include using namespace std;int* Func(){ int iTemp=100; int* pTemp=&iTemp; return pTemp;}int main(){ int* p=Func(); cout}解释:这种情况是错误的; pTemp指向的是局部变量iTemp,函数调用结束后要清栈,原创 2017-06-29 10:15:40 · 212 阅读 · 0 评论 -
子函数中为主调函数分配内存(转载)
int* fun(){int *k=new int(10);return k;}int main(int argc, char* argv[]){ int*i;i=fun();coutreturn 0;}这个测试程序中,在fun函数有new分配了一个整数的内存空间,并赋值为10,反回给main函数中的指针变量i。其过程如下:用new都是在堆中分配内存空间,如果不显示地原创 2017-06-29 10:15:45 · 604 阅读 · 0 评论 -
C++的dllexport和dllimport …
C++的dllexport和dllimport:__declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类__declspec(dllimport)声原创 2017-06-29 10:15:53 · 571 阅读 · 0 评论 -
c和c++的区别
c是面向过程的,数据与算法分开。它的重点在于算法和数据结构。侧重于计算机底层操作。c++是面向对象的,主要特点是类,封装和继承。与C的区别主要为:类、继承和多重继承、运算符重载、类模板、C++标准库、模板库。C++是C的超集,也可以说C是C++的子集,因为C先出现。按常理说,C++编译器能够编译任何C程序,但是C和C++还是有一些小差别。 例如C++增加了C不具有的关键字。这些关键原创 2017-06-29 10:17:30 · 206 阅读 · 0 评论 -
双指针的用法
2级指针是指向指针的指针,记住2级指针指向的还是个地址,就可以了。而1级指针所指向的变量要与指针变量类型相符才行。C语言传递参数都是传递"值",那么当你想修改这个"值"的时候,就需要用到指针.试想一下,当你需要修改一个指针的时候,那么就需要指针的指针了 我一般常用到实际中的`2级指针:1.函数中需要返回字符串或数组`2.二维数组1级指针:1.字符串2.数组或堆栈3.函数返回多个值原创 2017-06-29 10:17:28 · 307 阅读 · 0 评论 -
引用和常引用区别
#include "iostream.h"void main(){ inti=3; // 句1: int&ref=i; //句2: ref是变量i的另一名字。 cout cout i=4; cout}运行结果: 3原创 2017-06-29 10:17:25 · 2173 阅读 · 0 评论 -
类带参数构造函数,重载函数 …
class CV_EXPORTS_W BackgroundSubtractorMOG : publicBackgroundSubtractor{public://不带参数的构造函数 CV_WRAP BackgroundSubtractorMOG();//带参数构造函数 CV_WRAPBackgroundSubtractorMOG(int history, int原创 2017-06-29 10:17:05 · 359 阅读 · 0 评论 -
函数返回值—返回局部变量
原文地址:函数返回值—返回局部变量作者:老徐函数返回值—返回局部变量看看下面的程序的输出:#include char *returnStr(){ char *p="hello world!"; return p; } int main() { char *str; str=returnStr(); printf("转载 2017-06-29 10:16:31 · 262 阅读 · 0 评论 -
using namespace (命名空间)
在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。 原来C++标识符的作用域分成三级:代码块({……},如复合语句和函数体)、类和全局。现在,在其中的类和原创 2017-06-29 10:16:25 · 183 阅读 · 0 评论 -
struct和typedef struct的区…
1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Studentstu1;来声明) 这里的Stu实际上就是struct Student的别名。原创 2017-06-29 10:16:22 · 157 阅读 · 0 评论 -
wchar_t与char转换(转载)
#include//标准C++; 方式一:wchar_t--->char:string tp;wchar_t *s;char *d;tp=s;d=tp.c_str(); 方式二:char 和 wchar_t相互转化 关键字: char 和 wchar_t相互转化C代码#include#includevoid charTowchar(const char原创 2017-06-29 10:16:10 · 577 阅读 · 0 评论 -
类对象作为函数参数
对象也可以作为函数的参数传递给函数,其转递方法与传递其他类型的数据一样,可采用值传递和地址传递两种方法。值传递时是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;而地址传递时,调用该函数的对象与参数对象共用同一个地址,所以,函数对参数对象的任何修改都会影响调用该函数的对象本身。 上面是拷贝的别人的语句: 但是自己在编程实现的时候如果把类对象直原创 2017-06-29 10:15:56 · 6300 阅读 · 0 评论 -
typedef和#define的用法与区别&nbs…
typedef和#define的用法与区别 一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT;t原创 2017-06-29 10:13:59 · 178 阅读 · 0 评论 -
静态成员函数为什么不能访问…
原文地址:静态成员函数为什么不能访问本类中的非静态成员?作者:铿然一叶和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。如Box∷volume( );实际上也允许通过对象名调用静态成员函数,如a.volume( );但这并不意味着此函数是属于对象a的,而只是用a的类型而已。静态成员函数的作用是为了能处理静态数转载 2017-06-29 10:13:56 · 1171 阅读 · 0 评论 -
判断一个单链表是否有环及环…
原文地址:判断一个单链表是否有环及环的链接点(转)作者:蒙恩的罪人给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少? 解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、对于问题2转载 2017-06-29 10:11:38 · 184 阅读 · 0 评论 -
多态性和虚函数
1、静态联编和动态联编 在c++中,多态性主要是通过函数名重载实现的。重载函数是指程序中对同名函数进行调剁时,编译器会根据函数参数的类型和个数,决定该调用哪一段函数代码来处理这个函数凋蝴。这种把函数调用与适当的函数代码相对应的动作称为联编(binding)。 联编分为静态联编和动态联编。在编译阶段决定执行哪个同名的被调用函数,这称为静态联编;而在编译阶段不能决定执行哪个同名的原创 2017-06-29 10:11:24 · 176 阅读 · 0 评论 -
struct/union/enum的区别
关于C++和C的区别:区别最大的是struct,C++中的struct几乎和class一样了,可以有成员函数,而C中的struct只能包含成员变量。enum,union没区别。struct的定义:struct 结构标签{ 类型1 标识符1; 类型2 标识符2; 类型3 标识符3; 类型4 标识符4; 类型5 标识符原创 2017-06-29 10:10:35 · 820 阅读 · 0 评论 -
引用作函数返回值
C++中,返回引用是一个比较晦涩的概念。在书中,对此仅仅做了一个一般的介绍,并没有展开。我觉得有必要对此进行一定的展开。(1)首先,返回引用,要求在函数的参数中,包含有以引用方式或指针方式存在的,需要被返回的参数。比如:int& abc(int a, int b, int c, int&result){ result = a + b +c; return result; }这种原创 2017-06-29 10:10:19 · 300 阅读 · 0 评论 -
关于C语言中extern声明外部…
原文地址:关于C语言中extern声明外部变量的疑惑作者:Neville 最近在做毕业设计,我是学电子信息工程专业,大学四年就学了C语言和一点点汇编语言,本人喜欢做硬件电路方面的东东,所以毕业设计选做硬件方向的课题,但是,现在电子科技的发展,已经软件、硬件分不开了,做硬件的同时也离不开通过软件编程来对硬件平台的开发。毕业设计期间,在编程上遇到点问题,很是困惑,问题虽然已经解决,但是,对问题本转载 2017-06-29 10:09:29 · 7000 阅读 · 1 评论 -
#include 和typedef的区别
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:#define PI 3.1415926 //语句后面一定不能带“;”号,因为它也会被置换程序中的:area=PI*r*r会替换为3.1415926*r*r如果你把#define语句中的数字9 写成字母g 预处理也照样带入。原创 2017-06-29 10:09:26 · 325 阅读 · 0 评论 -
小议C语言中的数组和指针
1.引言 在C语言中,数组和指针是其中非常重要又联系紧密的两种数据类型,同时也是重点难点集中的地方。在学习这些内容时,经常会碰到这样一些问题,例如:数组名是什么,就是首地址吗?数组如何访问元素?数组为什么不能进行越界检查?数组表示法和指针表示法有何关系,谁更好?正确理解这些问题,对指针和数组的使用是非常有帮助的。2.数组名的含义 在大多数的教材中都对数组名作出这样的解释:数组是一组数据原创 2017-06-29 10:08:59 · 209 阅读 · 0 评论 -
栈和堆的区别
一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)― 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) ― 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)―,全局变量和静态变原创 2017-06-29 10:07:44 · 148 阅读 · 0 评论 -
C语言提示:什么是"逻辑或";…
原文地址:C语言提示:什么是"逻辑或";"逻辑非";"逻辑与"作者:小陌什么是"逻辑或";"逻辑非";"逻辑与"?、“!”(逻辑非)、“&&”(逻辑与)、“||”(逻辑或)是三种逻辑运算符。 “逻辑与”相当于生活中说的“并且”,就是两个条件都同时成立的情况下“逻辑与”的运算结果才为“真”。 “逻辑或”相当于生活中的“或者”,当两个条件中有任一个条件满足,“逻辑或”的运算结果就为“真”转载 2017-06-29 10:07:35 · 1415 阅读 · 0 评论 -
C++指针数组和指向指针的指针
一、指针数组的概念如果一个数组,其元素均为指针类型数据,该数组称为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址。一维指针数组的定义形式为 类型名*数组名[数组长度];例如int *p[4];可以用指针数组中各个元素分别指向若干个字符串,使字符串处理更加方便灵活。例6.15 若干字符串按字母顺序(由小到大)输出。#includeusing name原创 2017-06-29 10:11:41 · 383 阅读 · 0 评论 -
C语言实现把字符串转换成整数
@函数名称: atol 函数原型: long atol(char *str) 函数功能: 将字符串转换成一个长整数 函数返回: 转换后的数值 参数说明: str-待转换为长整型的字符串 所属文件: #include #include原创 2017-06-29 10:11:50 · 11583 阅读 · 0 评论 -
二进制数、八进制数、十六进制数与…
整数在内存中是以补码的形式存放的。(符号位1表示负,0表示正)正数的补码和源码相同;负数的补码=该数绝对值的二进制数—取反—加1;一个有符号的int型变量(当时2个字节时)取值范围:-2∧15~(2∧15-1),既-32768~32767;无符号的int型变量的取值范围是0~65535;若int a=32767;int b=a+1;则运行结果为b=-32768;也就是出现了溢出的原创 2017-06-29 10:11:53 · 57889 阅读 · 1 评论 -
typedef的作用
原文地址:typedef的作用作者:面包会有的C提供了许多标准类型(如int,char,flaot,double,long等),此外,还可以用typedef声明一个新的类型名来代替原来已有的类型名。 声明形式:typedef 已有类型名 自给新类型名;例:typedef intINTEGER;typedef float REAL; 则可以用新类型名来定义变量:INTEG转载 2017-06-29 10:13:42 · 849 阅读 · 0 评论 -
Exit()和return
函数: exit()函数名: exit()所在头文件:stdlib.h功 能: 关闭所有文件,终止正在执行的程序。exit(1)表示异常退出.这个1是返回给操作系统的不过在DOS好像不需要这个返回值exit(x)(x不为0)都表示异常退出exit(0)表示正常退出用 法: void exit(int status);参 数 : status //程序退出的返回值. retu原创 2017-06-29 10:13:36 · 220 阅读 · 0 评论 -
C++运算符重载赋值运算符
结构体变量直接赋值:如果包含指针,赋值只能实现浅拷贝。被赋值的结构体变量的指针成员与原结构体变量的指针成员指向一个地址。 我们已经习惯了为结构体变量中的每个成员赋值,那么我们可以在两个结构体变更之间直接使用“=”号赋值吗?答案是肯定的,因为编译器支持。例如定义一个表示矩形的结构体: typedef struct _Rectangle{ i原创 2017-06-29 10:13:34 · 1205 阅读 · 0 评论 -
对于结构体变量赋值的误区
以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对。于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题。还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不原创 2017-06-29 10:13:31 · 368 阅读 · 0 评论