c++复习笔记2

(编程基础)

1. 函数(程序自身)、字符串常量常放在只读内存区域。

   string *s = "abc";  //字符串常量定义了之后不能修改

   s[1] = 't';  // 错误

  而char数组可以修改。

   char s[3] = "abc";

    s[1] = 't'; // 正确

2. 指向函数的指针

 int fun (int a);

 int (*func_p)(int a);

  func_p = func;

  可以直接通过func_p调用函数,例如func_p(1);

3. 写递归函数时养成递归信任,注意以下问题

  1)是否检查了最简单情况

        将问题分解成子问题前,先检查是否足够简单;大多数情况以if 开头。

  2)是否解决了最简单情况

        最简单情形不能调用自身递归,递归错误首先需要检查最简单最简单情形的正确性。

  3)递归分解是否使问题更简单

        只有分解得子问题更简单,递归才能有效,否则将无线递归下去

  4)问题简化过程是否能够回答最简单情况,或者遗漏了某些情况

        例如汉诺塔问题需要调用两次递归,遗漏会导致递归错误。

  5)子问题是否与原问题完全一致

        如果递归过程改变了问题实质,则整个过程会得到错误结果。

  6)使用递归信任时,子问题的解是否正确组装为原始问题的解

       例如汉诺塔问题中将n-1个盘先放到临时塔保存,然后将第n个盘从起点塔移到目标塔,再递归地将n-1个盘子从临时塔移到目标塔。

汉诺塔问题伪代码:

4. 生成随机数用cstdlib库中的rand()函数,但是随机数发生器生成的随机序列是相同的,实际上不是随机。因此使用srand((int)time(0))函数(程序运行过程中只能调用一次,在调用rand()函数之前调用),设定随机数发生器的种子,调用time()函数得到CPU时间,传递的时间不同,则随机数种子不同。

5. 声明与定义

  定义在程序产生一个新实体,声明在程序中引入一个新实体。

  函数的声明是给出函数原型,函数的定义是给出函数实现代码。

  头文件中不能定义全局变量,只有声明才可以出现在头文件中,可以使用extern关键字在头文件中声明变量,则包含了该头文件的文件可以使用该变量。

6. 软件开发流程

(螺旋式开发流程)

需求分析:明确输入输出;

方案设计:设计程序框架,包括概要设计(总体方案和模块划分)和详细实现(各模块的输入输出和算法);

编程实现:实际编程;

系统测试:测试程序的正确性和稳定性;

经验总结(技术分享)。

系统测试时:对于需要测试的代码,为了防止删减发生错误,可以使用宏的方式进行测试:

    #ifndef  NBUG

        func();

     #endif

如果没有定义NBUG这个宏,则会执行func(),否则不执行。

7. 字符可以当做小数字进行运算;标准字符特征库常用函数:

8. 对于数组来说,num_of_elements = sizeof(a)/size0f(a[0])。数组作为参数传递时,传递的是数组的基地址,形参和实参使用相同的内存,对数组形参值得改变会影响到实参。

9.指针可以作为函数返回值,函数内部返回数据对象的地址,调用函数将返回值复制给某个指针,但是不能返回函数内部定义的局部变量地址,而只能是全局变量的。

10. 标准c字符串库cstring常用函数

11.读取整行: getline(cin,str,'\n') ,读取包含空格和制表符在内的整行。

s1.compare(s2,0),从第0位开始比较s1和s2的大小。

s1.find(s2),从s1开头开始查找,结果为s2在s1中首次出现的位置。

12. void * 指针

猜你喜欢

转载自blog.csdn.net/qq_38282762/article/details/81775338