数组
显示初始化数组元素
如果没有显示提供元素初值,则数组会像普通变量一样初始化:
在函数体外定义的内置数组,其元素均初始化为0;
在函数体内定义的内置数组,其元素无初始化;
如果元素为类类型,则自动调用该类的默认构造函数进行初始化;如果没有默认构造函数,则必须为该数组的元素提供初始化。
与vector类型不同,数组的长度是固定的。
创建和释放动态数组
通常在编译时无法知道数组的维数,所以才需要动态创建该数组
int i = 10
int *p = new int[i];//uninitialized
int *s = new int[5](1,2,3,4,5);//initialized
delete []p;
delete []s;
指针
指针和数组用于低级操作。现代的c++程序采用vector类型和迭代器取代一般的数组、采用string类型取代c风格字符串。
void*指针
C++提供特殊的指针类型void*,它可以保存任何类型对象的地址;
支持有限的操作:
与另一个指针比较;
向函数传递void*指针或从函数返回void*指针
给另一个void*指针赋值。
不允许使用void*指针操纵它所指向的对象。
指针的算数操作
ptrdiff_t n = ip2-ip;//ok distance between the pointers
ptrdiff_t是标准库类型,在cstddef头文件中定义。是signed整型
c风格字符串标准库函数
strlen(s) 永远不要忘记字符串s结束符null;
strcpy(s1,s2) 必须确保目标字符串有足够大的空间;
strncpy(s1,s2,n) 能拷贝制定长度n的字符串,但如果n比s2中的size长度还要大,数组还是会溢出。
解决办法:采用string类型取代c风格字符串
多维数组和指针
int ia[3][4];
int (*ip)[4] = ia;
ip = &ia[2];