开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
3.5 数组
不同于vector:数组大小确定不变,不能随意向数组中增加元素。对于不确定元素的确切个数,建议使用vector
3.5.1 定义和初始化内置数组
编译的时候,数组的维度应该是已知的,所以,维度必须是一个常量表达式
字符数组的特殊性
//在使用字符串字面值初始化时,要注意字符串字面值结尾还有一个空字符
const char a4[6] = "abcdef"; //err没有空间添加空字符,检索过程只用碰到空字符才会停止,如此的话会持续检索下去导致出现不可预料的安全问题
char ca[] = {'c', '+', '+'};
cout << strlen(ca) << endl; //严重错误,没有空字符,strlen可能会沿着ca的内存中的位置不断寻找直到遇到空字符
不允许拷贝和赋值如果在某些编译器上允许,那是得益于所谓的编译器扩展,但是在移植到其它编译器上可能会出现问题。所以,不要使用非标准特性
复杂的数组声明
int *ptrs[10]; //ptrs是含有10个整形指针的数组
int &refs[10] = /* ? */; //err不存在引用的数组
int (*Parray)[10] = &arr; //Parray指向一个含有10个整数的数组
int (*arrRef)[10] = arr; //arrRef引用一个含有10个整数的数组
//arry指向一个含有10个整数的数组的引用
int *(&arry)[10] = ptrs; //arry是数组的引用,该数组含有10个指针
3.5.3 指针和数组
C++11特性引入两个函数begin和end。
int ia[] = {1,2,3,4,5};
int *b = begin(ia); //这是是将数组作为两个函数的参数使用
int *e = end(ia); //
3.5.4 C风格字符串
| strlen(p) | 返回p的长度 |
|---|---|
| strcmp(p1, p2) | 比较。p1==p2,返回0;p1>p2,返回正值;p1<p2,返回负值; |
| strcat(p1, p2) | p2附加到p1后,返回p1 |
| strcpy(p1, p2) | 将p2拷贝给p1,返回p1 |