什么是Array?
Array 就是一组相似的数据集合,每个数据叫做element。
Tricky
- 要注意十个元素的array计数从a[0]到a[9], not a[1] 到 a[10]
- 写入out-of-bound的数据时,编译器不检查是否越界,直接硬写,从首地址偏移相应的字节数后,在内存中写入新数据,这可能造成程序崩溃,如果你写入的地方恰好是关键变量的话。
Initializing Arrays
Omit the siaze of the array
—just big enough to hold the initialization is created:
int post[] = {10, 20, 30, 40, 50};
创建了五个元素的array
计算元素数量:
const int size = size(post)/size(post[0]);
Initialize an array with fewer elements than it holds
int long[5] = { 10, 20};
其余值默认为0
Multidimentional Arrays
一维array理解为一行元素
二维array可用下图理解
初始化的方法
通常,为了清晰明了,使用以下方法初始化
int box[5][3] = {
{5, 3, 6},
{8, 6, 7},
{2, 7, 11},
{55, 33, 22},
{43, 3, 5}
};
这与
int box[5][3] = { 5, 3, 6, 8, 6, 7, 2, 7, 11, 55, 33, 22, 43, 3, 5};
本质上是一样的,内部的花括号编译器会忽略掉。
Character Arrays
String 本质是一个array, 结尾是 null, null就是’\0’
两种方法初始化 character array
- char yum[] = { ‘Z’, ‘ ’, ‘E’, ‘a’, ‘t’, ‘ ‘, ‘B’, ‘r’, ‘a’, ‘i’, ‘n’, ‘s’, ‘\n’};
- char yum[] = “Z Eat Brains”;
两种方法等效,后者自动在末尾添加 null
还有一种不初始化的方法,buffer
std::cin >> yum;
这种方法有两个潜在危害
- 用户输入字符数超过buffer范围
- 用户如果输入 space, cin会认为输入完毕
解决这个问题的方法是使用cin的getline()函数,两个变量
- buffer
- 最大字符数
std::cin.getline(yum, 18); 这允许用户输入18个字符(包括null)
此函数还可以有第三个参数:终止符
std::cin.getline(yum, 18, ‘ ‘);
当用户输入第一个空格时,输入被认为结束,如果省略第三个参数,则认为用户输入换行符’\n’结束输入
当用户输入超过规定的字符数时,超出部分不予录入。
char name[10];
cout << "input your name" << endl;
cin.getline(name, 9);
cout << "U entered " << name << endl;
注意如果空间是10个字符,getline中必须是9个字符,最后一个预留来放null
Copying String
C++继承了C的库,复制String时可以 include <string.h>
strcpy(tarStr1, srcStr);此函数风险是array越界,越界后什么样子呢,见下图
strncopy(tarStr1, srcStr, 80); 此函数第三参数限定了max characters to copy
Reading Arrays with Foreach Loops
C++提供了一种遍历array元素的方法, for, 这个for循环用冒号分隔,而不是分号
talk is cheap show you code
#include <iostream>
int main()
{
int production[] = {3333, 5555, 3333, 7777};
for(int year : production)
{
std::cout << "Output: " << year << std::endl;
}
return 0;
}
这个是C++14新功能,编译时要添加std = c++14 懒得弄了,感觉学下面的吧,有时间可以参考一下这个连接https://stackoverflow.com/questions/31171979/enabling-std-c14-flag-in-codeblocks
Q.未初始化的array里面存的什么数?
A.declare一个array后,会在内存中申请一片空间,所以未初始化的元素的值,就是原来内存中的值,测试一下如下图
本文详细介绍了数组的概念及使用方法,包括一维和多维数组的初始化、元素的读取和复制,以及字符数组的处理技巧。




被折叠的 条评论
为什么被折叠?



