C++知识整理(多益笔试) 20131012

前言:

还是关于笔试知识的整理,主要是面向对象的知识还有一些常见的语法知识。

1.还是C++内存管理的知识

C++中程序的内存分布如下:

栈:向下增长,可读可写可执行;

堆:向上增长,可读可写可执行;

BSS数据段(就是存放未初始化的数据段):向上增长,可读可写不可以执行;如果程序员没有初始化,但是在这一个数据段中的数据会将内存清0,默认初始化是0.

.data数据段:向上增长,可读可写不可以执行,就是存放的全局变量、静态变量的(已经初始化);

.text 代码段:向上增长,可读可写不可以执行。

分析一下程序中变量:

局部变量、函数参数存放在栈中;静态局部变量,并不是在调用函数的时候分配,在函数返回的时候释放,而是像全局变量一样,静态的分配在数据段,作用只能在函数内部使用。

堆,是动态费分配内存的空间;new malloc

全局变量、静态变量位于数据段,未初始化的全局变量静态变量则是位于bss数据段。程序运行开始的时候,初始化为0,放在data段后面合称为数据区。但是不占用exe执行文件的大小。

const修饰的全局变量在rodata只读数据段,const修饰的变量必须初始化,如果未初始化,将会被设置成为0,只读数据段和代码段在同一个段中。

代码段:存储程序文本,指令指针就是在这里获取,一个段是可以被共享的。

2. 一个陷阱

int  a=5,b=6,c=7,d=8,m = 2,n = 2;

(m=a>b)&& (n=c>d);

首先是运算符的优先级 > 的优先级是比 = 大的。然后就是问题出现的地方了:

(m= a>b) &&(n= c>d); 首先a>b 是错的,则m= 0,之后的表达式是不会被执行的,所以n依旧是2;

3.C++中只用普通的成员函数,析构函数可以使用虚函数,其他的构造函数、静态函数是不可以声明为virtual函数的。同时在析构函数中,声明析构函数式virtual类型,用于继承,当使用父类的指针指向子类的对象的时候,删除指针的时候,只会自动调用父类的析构函数,而不会调用子类的析构函数,这样会造成内存的泄露。所以子类的析构函数也需要使用virtual声明为析构函数,当delete指针的时候,也会自动调用子类中的析构函数。

同时指针是不可以随便delete的,只有对于在堆中的对象的指针,才是可以删除的,否则运行的时候内存报错.

Devried d;

Base *pBase = &d;

delete pBase;

虚析构函数

class Base{

public:

Base(){

cout << "Base:Base()" << endl;

}

virtual ~Base(){

cout << "Base::~Base()" << endl;

}

};

class Devried : public Base{

public:

Devried(){

cout << "Devried::Devried()" << endl;

}

~Devried(){

cout << "Devried::~Devried()" << endl;

}

};

Base *pBase = new Devried();

delete pBase;

Base:Base()

Devried::Devried()

Devried::~Devried()

Base::~Base()

请按任意键继续. . .

4.C++不是一中类型安全性的编程语言,因为不同类型的指针可以互相转换,而C#是类型安全恶编程语言.

5.函数返回值是数组类型的时候,只是返回的数组的地址,而不是数组,所以这个数组在函数中必须是通过动态分配内存实现的,否则函数结束之后,会自动释放掉数组的栈空间。

6. 命令行参数

main.exe adv edf //argc = 3, 分别是 三个字符串,其中argv是指向字符指针的指针。

int main(int argc, char **argv)

{

char *str,cx;

cout << *argv << endl;

cout << *++argv << endl;

cout << (char) *((*argv)+1) << endl;

int cn = 0;

if(argc < 2){

return 0;

}

}

7.对于unsigned int + int 值,都转成unsigned int 的类型。

但是返回结果赋值给其他的变量的时候,有会转为相应的类型

int a = 14;

unsigned int b = -20;

cout << a+b << endl; // 很大的一个正数

int c = a+b;  // -6

cout << c << endl;

8.do{ } while(false);只会执行一次、

int i = 0;

do{

i++;

if(i < 16){

printf("123");

}

}while(false);

9.printf("123"+"123");编译出错。

C++进阶4.C++知识整理的更多相关文章

  1. 【转载】UML类图知识整理

    原文:UML类图知识整理 UML类图 UML,进阶必备专业技能,看不懂UML就会看不懂那些优秀的资料. 这里简单整理 类之间的关系 泛化关系(generalization) 泛化(generalize ...

  2. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  3. 谈谈Java程序员进阶的那些知识和方向

    谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...

  4. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  5. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  6. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  7. 数据库知识整理<一>

    关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...

  8. Linux进程管理知识整理

    Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

  9. js事件(Event)知识整理[转]

    事件注册 平常我们绑定事件的时候用dom.onxxxx=function(){}的形式 这种方式是给元素的onxxxx属性赋值,只能绑定有一个处理句柄. 但很多时候我们需要绑定多个处理句柄到一个事件上 ...

随机推荐

  1. git 常用的撤销操作

    git 开发时的使用流程,从同事那里学习的, 第一步,先建立一个新的分支,可以在GITLAB或通过命令git checkout -b newbranch 或通过IDE插件 第二步,让项目切换到该分支, ...

  2. 写入Csv

    //定义文件输出流  FILE *f; f = fopen("a.csv" , "wb"); fprintf(f,"aaa,23,sdf\n" ...

  3. JVM调优总结(转)

    本文转自:http://my.oschina.net/xishuixixia/blog/132395 常用的调优参数. 1.堆大小 -Xms和-Xmx用于指定堆大小,我们需要将他们俩设置为一样的值,以 ...

  4. linux性能分析命令1:top命令

    转载:http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的 ...

  5. 20145324 《Java程序设计》第5周学习总结

    20145324 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.java中所有错误都会被包装成为对象 2.可以使用尝试(try)执行程序并捕捉代表错误的对象后做一些处理 ...

  6. 20144303 《Java程序设计》第九周学习总结

    20144303 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 一.JDBC入门: JDBC全名Java DataBase Connectivity,是java联机数据库 ...

  7. linux 下各个头文件的作用[典]

    linux 下各个头文件的作用   2.6.30.4的头文件的位置和2.6.25.8的不一样,除去内核源码下的include目录外, 在arch/arm/mach-s3c2410/和arch/arm/ ...

  8. Java 可重入锁

    一般意义上的可重入锁就是ReentrantLock http://www.cnblogs.com/hongdada/p/6057370.html 广义上的可重入锁是指: 可重入锁,也叫做递归锁,指的是 ...

  9. jquery post 同步异步总结[转]

    1.post被请求多次,解决方法: 连接加入随机数 rand=""+Math.random() $.post("/Control/webControl.ashx?rand ...

  10. svn根据项目来创建目录结构或者根据分支来创建项目结构

    假设检出项目的时候,都使用trunk来进行检出 按照项目来创建目录结构 TestPrj版本库 适合一次只检出一个项目的需求 这个版本库的名字无所谓,随便起就好了.因为检出某一个项目的trunk的时候, ...