C++ 零碎知识

C++的string 如何转化为char*类型

string s="***";
char* new_s=s.c_str();

返回的是const char*类型

 

VS2010控制台一闪而过 解决办法:项目-属性-配置属性-连接器-系统-子系统-控制台(/SUBSYSTEM:CONSOLE)

VS快捷键

CTRL + K, CTRL + C注释选择的代码
CTRL + K, CTRL + U取消对选择代码的注释

 

模版函数貌似不能放在头文件中声明,CPP中定义,需在头文件里定义和实现。

指针p==NULL时,p->next无效,会终止程序。

 

malloc和new的区别

1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
4,new无需指定分配大小,malloc需要指定分配空间大小。

5、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。
前置++和后置++
在++操作符重载中
operator++(); //前置符号
operator++(int); //后置符号
(函数重载参数要不同,编译器在编译的时候会给后置++自动加一个无用的参数0,来区别到底连接哪个函数。)
int a;不给a赋值的话,这定义在全局变量的时候a=0,而在函数内定义的时候a为随机数?

局部变量是任意值的原因是只分配了内存而没有初始化,内存中保留着原来的垃圾值。并不是编译器给变量赋的随机值。而是内存中有块地方,我拿来用了,但是原来里面的东西我没有清理。
全局变量和static变量存放在全局区,局部变量存放在栈区。

程序的内存分配

一个由c/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack)

由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2、堆区(heap)

 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)

全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data)

,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。

程序结束后由系统释放。

4、文字常量区

常量字符串就是放在这里的(.rodata)。

程序结束后由系统释放。

5、程序代码区

存放函数体的二进制代码(.text)。

 

static全局变量与普通的全局变量有什么区别?

static局部变量和普通局部变量有什么区别?

static函数与普通函数有什么区别?

答: 

1) 

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,

静态全局变量当然也是静态存储方式。

这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,

非静态的全局变量在各个源文件中都是有效的。

 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的

其它源文件中不能使用它。

由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

2) 

从以上分析可以看出,

把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。

把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。                   

3) static

函数与普通函数作用域不同,仅在本文件。

只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。

对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 

 

综上所述: 

static全局变量与普通的全局变量有什么区别:

static全局变量只初使化一次,防止在其他文件单元中被引用; 

static局部变量和普通局部变量有什么区别:

static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:

 static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

 

构造函数

在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数

 

posted @ 2013-07-05 15:48  DET橙  阅读(231)  评论(0编辑  收藏  举报