数组和指针
---int array[size],只有在size是宏定义或者const类型数据(在编译时就能得到变量的值)时才符合语法
---使用字符串进行字符数组的初始化,会隐式的加空字符\0
----存在一种特殊的void*指针,只能进行有限操作
----指针与引用的区别:(1)引用定义时必须初始化(2)指针的赋值是将一个指针与另一个对象关联,引用的赋值是将另一个对象的值赋给这个引用。指针:int *a,*b;引用 int &a=1;int &b=2;
---C++允许计算数组或对象超出末端的地址,但是不允许对地址进行解引用操作,但是再往后的地址不允许计算
----动态数组:动态数组在程序显式的释放内存之前都将一直存在
动态数组的定义:int *p = new int[10];后面加上()则表示初始化为0,不加则不做初始化或者调用默认构造函数,初始化需要使用循环
---动态数组的内存释放:delete [] p;delete 释放数组时不加中括号可能会造成内存泄漏等错误
---多维数组初始化int ap[2][2]={ {1,2} , {3,4} };
使用预处理器进行调试:
---将调试语句用以下形式表示:
#ifndef NDEBUG
cerr<<......<<endl;
#endif
调试过程中若NDEBUG未定义,则执行语句,将信息写入cerr,若定义了则直接跳过并执行其它语句,多数编译器编译时都有命令行选项,例如CC -DNDEBUG main.c
预处理器预设了几种有用的常量:
__LINE__ | 这会在程序编译时包含当前行号。 |
__FILE__ | 这会在程序编译时包含当前文件名。 |
__DATE__ | 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。 |
__TIME__ | 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。 |
另一种调试技术是使用assert预处理宏,定义在cassert头文件中。使用方法 assert(express),若NDEBUG未定义,就求解条件表达式express,若为false则输出结果并终止程序,若存在非0值则不作任何操作。通常用来测试程序中不可能出现的情况。