形式一:
#define N 10 int a[N]; int n = 10; int b[n];//编译报错
注意这种定义数组的形式有很多缺点,例如:1:数组的长度必须是在编译时就知道的,即数组的长度不能改变,
在定义数组指定数组的长度值必须为一个常量值,2:数组只在定义它的语句块内存在,因为这种形式属于是编译器
自动在栈内存为数组分配空间。
形式二:
int n = 10; int *c = new int[n]();//编译成功通过
动态分配数组时,可以用一个变量指定数组的长度,即程序可以在运行时动态的去判断数组的实际长度,而且
数组的内存空间是在堆内存中,数组的内存数据存在时间受程序员自己控制。
注意:在形式二中,1:即使当程序运行时得出数组的长度为0,程序也不会出错,因为调用new动态创建长度为0的
数组也是合法的。2:在程序的结尾程序也一定要显示的自己去释放数组的动态空间。
十二、C++string类型和c风格字符串代码的相互兼容
1:c风格字符串转换成string类型对象
int a[1]; int * b = new int[0](); string str("asd");//直接构造一个string新对象 string ss = (string)("asd");//使用强制类型转换成string对象 cout<<ss<<endl;//输出asd
2:string类型对象转换成c风格字符串
直接调用string类型成员函数.c_str()即可
const char * s = str.c_str(); while (*s) { cout<<*s<<flush; s++; }//输出asd
十三、用typedef简化多位数组的指针
在C++中当要定义指向数组的指针时,一个很灵活的方法就是用typedef类型定义,这将会
使该指向数组的指针更加的易读、易写和方便理解。
For Examp: typedef int int_array[4];//声明int_array是一个有4个int类型元素的数组类型 int_array a;//a是一个有4个int类型元素的数组类型,即a为int * 类型对象 //测试a a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4; int * p1 = a ; //int * * p2 = a;//错误原因:“不能将int* 类型赋值给int**类型” for(int i = 0;i<4;i++) { cout<<a[i]<<flush; }//输出1234 //用typedef简化多位数组的指针 int_array * p;//声明p是一个指向数组的指针,而且该数组必须是一个含有4个int类型元素的数组 int array[2][4]= {{1,2,3,4},{5,6,7,8}}; p = array; for(int i = 0;i<2;i++) { for(int j = 0;j<4;j++) { cout<<p[i][j]<<flush; } }//输出123456789
十四、按位操作中的左移、右移
注意:使用左移操作符时,将会在左边插入0以补充空位,而对于右移操作符时,
如果其操作数是无符号数,则从右边开始插入0,如果是有符号数,则插如符号位的副本或者0值。
十五、赋值操作符的右结合性
赋值操作符是从右往左结合的,且其返回值是左值。