C++编程关键路径(一)

最近看了这本由中国水利水电出版社出版的这本书,作者是梁永军,感觉里面的东西对我个人来说挺有用的,所以总结一下,也算是自己复习一下

第一章:C语言关键知识

1、关于内存:

(1)栈:是用于那些在编译期间就能确定存储大小的变量的存储区,在函数作用域内创建,离开作用域后自动销毁。通常存储的是局部变量、函数参数等。存储区域一般是相邻的。

(2)堆:是用于那些在编译期间不确定存储大小的变量的存储区,存储空间一般是不连续的,由malloc(new)和free(delete)来申请和释放内存,

(3)全局(静态存储区):在编译期间就能确定变量占用内存的大小,一般是全局变量和静态变量。

(4)常量存储区:存放的是常量,程序运行期间,全局可见,不允许被修改。

变量分为左值和右值,对于:char* p=”hello world”;中,左值是局部指针变量p,存储于函数栈上,右值是字符串常量”hello world”,存储于常量存储区。

2、函数的参数传值和传址

参数传值:把实参的值复制到函数运行时分配给函数的参数存储区中,函数不会访问调用函数的实参,被调用函数处理的是实参在本地的拷贝,这些拷贝值存储在函数的栈中。

参数传址:把实参的地址(指针或引用)传入函数,被调用的函数直接操作的是变量的地址,目的有两个:一个是改变传入的变量的值,一个是提高效率,减少参数传值过程中需要的复制过程。

在实际开发中,简单类型(int,float,char等)用参数传值;复杂类型(struct,class等)用传址。

3、常量和指针

(1)char* const a:指针常量,指针指向的char型是可以修改的,但指针是不可修改的;

(2)const char *a:常量指针,char型是不可修改的,但指针可以修改。

(3)char const *a const:指针指向的char型是不可修改的,同时指针也是不可以修改的。

4、临时对象

临时对象是不可见的,不会在程序的源代码中出现,只要程序产生了一个非堆上对象而没有命名它,边诞生了一个临时对象。通常子在两种情况下发生:一个是用于函数参数类型的隐士转换,以便使得函数能被调用成功,另一个是当函数返回对象的时候。

5、预处理

(1)文件包含:#include <文件名>包含的头文件保存在C++系统目录中的include子目录下,#include “文件名”,预处理器首先在当前所在的目录中进行搜索,如果找不到,再按标准方式进行搜索。

(2)宏替换:注意括号的应用

(3)条件编译:在编译时有选择的挑选,注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。

(4)布局控制:#progma,为编译程序提供非常规的控制流信息。

#progma once:在头文件的最开始加入,保证头文件被编译一次。

#progma comment(lib,”user32.lib”)用来将user32.lib库文件加入到工程中。

#progma pack([n])使内存按照一个固定的规则分配,让分配的内存总是n的倍数 。

地址对齐:

  • 变量起始地址的偏移量必须是该变量的类型所占的字节的倍数。
  • 结构体里,按照长度最小的那个值对齐,但整个结构体的大小是长度最大的那个值的整数倍。(自己个人的理解)
  • #progma pack([n]),对齐时取n和长度最小值中的较小者,整个长度是n和长度最大值中的较大的数的倍数。随后使用#progma pack(pop)恢复默认规则。

 

第二章:关键算法和数据结构(需要深入学习)

1、链表

单向(双向)链表的创建、查找、插入和删除操作

2、树

树的根节点,节点的度,树的度,树的深度

二叉树

3、排序算法

(1)插入排序:直接插入排序和希尔(shell)排序

(2)选择排序:直接选择排序和堆排序

(3)交换排序:冒泡排序和快速排序

(4)归并排序:

 

第三章:记住C语言的常用函数库

1、<stdlib.h>:涉及类型转换、内存操作和随机函数等。

2、<stdio.h>:大部分输入输出操作函数。

3、<math.h>:数学问题的函数,用于浮点数。

4、<ctype.h>:和类型有关的函数。

5、<string.h>:字符串处理函数

6、<malloc.h>:内存处理函数。

posted @ 2012-09-15 22:02  always on the way  阅读(1995)  评论(0编辑  收藏  举报