数组必须用值大于等于1的常量表达式定义。
非const变量或者运行期才知道值的const变量都不能用了做维数。
如果没有显示提供元素初值,数组会像普通变量一样初始化。
与vector不同,数组不能通过变量间赋值进行初始化。
数组元素访问,通过下标(size_t).就像vector通过(size_type)一样。
指针与引用的区别:
引用总是指向某个对象,定义引用时没有初始化是错误的。
赋值行为的差别:给引用赋值改变的是引用所关联对象的值,而不是使引用与另一
个对象关联。
指针减法操作的结果是标准库类型的ptrdiff_t,再cstddef中定义。
size_t是unsigned型,ptrdiff_t是signed型。都是与机器相关的类型。
c++运行计算数组或对象超出末端的地址,但是对该地址的解引用操作时不允许的
。而计算数组末端之后和首地址之前的地址都是非法的。
指向const对象的指针可以被赋值为非const对象的地址。可以理解为自以为指向
const的指针。
double a = 1.0;
const double *p = &a;
const指针:指针指向地址不能改变,但是地址内的内容可以改变
int errnumb = 0;
int* const perr= &errnumb;
指向const对象的const指针:既不能改变地址,也不能改变地址内的值。
const double pi = 3.14;
const double* const ppi = π
指针与typedef:
typedef string *pstring;
const pstring p; //实际定义了一个指向string的const指针。
c++支持c风格字符串,但应尽量少用。cstring库。
c中使用标准库malloc free分配释放堆内存。
c++中使用new,delete表达式分配释放内存。
创建动态数组:
int *pia = new int[10]; //未初始化。
int *pia2 = new int[10](); //要求编译器初始化。
注意:c++不允许定义长度为0的数组变量;但是允许new元素数为0的数组(而且是
非0指针)。
释放:(如果缺少[]可能会导致内存泄露)
delete []pia;
混合使用string和c风格字符串
1.可以使用c风格字符串为string对象初始化或者赋值。
2.c风格字符串可以做+的一个操作数;或者复合赋值运算符的右操作数。
反之不成立。
可以同过c_str()函数返回指针指向const char数组的指针。
const char *pstr = st2.c_str();
使用数组初始化vector:
const size_t arr_size = 6;
int int_arr[arr_size] = {1,2,3,4,5,6};
vector<int> v1(int_arr, int_arr+arr_size); //取之间的元素,不包含最后一
个。
多维数组:本质上没有多维数组。
int *ip[4]; //指向int的指针数组。
int (*ip)[4]; //指向int数组的指针
使用typedef简化多维数组的使用:
int ia[3][4];
typedef int int_array[4];
int_array *ip = ia;