元素类型 数组名称[数组长度];
int sales[6];
在声明数组后,内存会为数组分配一块连续的空间。我们可以从内存的角度再来理解一下数组:数组中包含若干个元素,每个元素都是一个变量,因此每个元素都是有地址的,而数组名其实表示的就是第一个元素的起始地址。
0到 数组长度-1数组名称[索引序号]cin >> sales[0];, scanf("%d", &sales[0]);
cout << sales[0];, printf("%d ", sales[0]);
sales[0] = 3;
int a = sales[0];
sales[0] += 3;
int sales[6] = {1, 3, 5, 7, 9, 11}int sales[6] = {1, 3},得到1, 3, 0, 0, 0, 0int sales[] = {1, 3, 5, 7, 9, 11}int sales[6];
for (int i = 0; i < 6; i++) {
sales[i] = 2 * i + 1;
}
int sales[6] = {0};
cin >> sales[0];
scanf("%i", &sales[1]);
cout << sales_4[0];
printf("%i", sales[1]);
元素类型 数组名称[数组第一个维度长度][数组第二个维度长度]
int scores[5][3];
通过scores[1]访问第2个数组,再通过scores[1][2]访问该数组的第3个元素
int scores[5][3] = {
{8, 4, 6} , /* 初始化索引号为 0 的行 */
{5, 6, 3} , /* 初始化索引号为 1 的行 */
{3, 2, 4} , /* 初始化索引号为 2 的行 */
{8, 7, 6} , /* 初始化索引号为 3 的行 */
{7, 9, 8} , /* 初始化索引号为 4 的行 */
};
// 或者省略掉第二层的大括号
int scores[5][3] = {8, 4, 6, 5, 6, 3, 3, 2, 4, 8, 7, 6, 7, 9, 8};
int scores[5][3];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) cin >> scores[i][j];
}
int scores[5][3] = {0};
cin >> scores[0][0];
scanf("%i", &scores[0][1]);
cout << scores[0][0];
printf("%i", scores[0][1]);

-1初始化后,再通过输入修正分数;// 声明并初始化得分,第二轮此时评委1对选手1还没有打分
int scores[5][3][2] = {
{{8, -1}, {4, 3}, {6, 5}},
{{5, 6}, {6, 5}, {3, 8}},
{{3, 8}, {2, 9}, {4, 7}},
{{8, 7}, {7, 5}, {6, 3}},
{{7, 7}, {9, 7}, {8, 9}}
};
int avg_score, score_sum;
// 通过输入修正分数
scanf("%i", &scores[0][0][1]);
for (int i=0; i<5; i++) {
score_sum = 0;
cout << "选手" << (i+1);
// 对该选手的每一轮打印分数并统计平均分
for (int k=0; k<2; k++){
cout << "第" << (k+1) << "轮得分:";
avg_score = 0;
// 计算该选手在该轮的平均分
for (int j=0; j<3; j++) {
avg_score += scores[i][j][k];
cout << scores[i][j][k] << " ";
}
cout << endl;
avg_score /= 3;
// 该选手的总得分加上该轮的平均分
score_sum += avg_score;
}
cout << score_sum << endl;
}
字符串,比如:"XiaoMing"、"LaoWang"和"HanMeimei"等。
由于字符变量能存储一个字符,对于一个字符串,可以用类型是char的数组来存储,这类数组称为字符数组。
'\0' 作为结束符的一组字符。""。空字符串并不是不占空间,而是占用了 11 字节的空间,这个字节中储存了一个'\0'。'\0' 作为结束符,因此所需的储存空间比实际的字符串长度大1。'a' 和 "a" 是不一样的,前者是一个字符常量,在内存中占 1 字节,后者是一个字符串,占 2 字节的空间,第 1 个字节储存了字母 a 的内码值,第二个字节储存了 '\0'。// 第一种:给每个元素指定初始化值
// 依次赋初值,剩下的会默认被初始化为\0
char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', '\0'};
char userName[11] = {'L', 'a', 'o', 'W', 'a', 'n', 'g'};
// 和普通数组一样,元素个数可以省略,c++会自动识别长度为8
char userName[] = {'L', 'a', 'o', 'W', 'a', 'n', 'g', '\0'};
//第二种:使用字符串常量初始化字符数组
char userName[11] = {"LaoWang"};
// 大括号可以省略
char userName[11] = "LaoWang";
cin和coutchar ch[11];
cin >> ch;
- 输入的时候,使用`cin`语句,会不断的读入字符串,直到遇到一个空白字符(空格、回车或者制表符)就结束读入
- 用`cin`向计算机输入一串字符时,输入的字符的数量应该少于已定义的字符数组的长度,否则会出现问题
- 如果输入的字符的数量小于字符数组长度时,剩下的部分会默认补上`'\0'`
cout << ch;
- 从字符数组的第一个字符开始输出,直到遇到 `'\0'`(不会输出`'\0'`)
- 如果一个字符数组中包含一个以上`'\0'`,则遇第一个`'\0'`时`cout`输出就结束
scanf printf也可以输入输出字符串scanf("%c", &变量名),而输入一个字符串用scanf("%s", 数组名)scanf("%s", userName);
注意,因为是字符串也是一个字符数组,scanf里,数组前不需要加&,只有变量名字需要加&。
字符的输出用 printf("%c", &变量名),而输出一个字符串用printf("%s", 数组名)
printf("%s", userName);
strcat(s1, s2)函数可以把字符串s2 连接到s1的末尾。strlen(s1)函数可以返回字符串s1的有效字符数。比如"yes"的长度就是3。strcmp(s1, s2)函数可以比较两个字符串之间的字典序:如果s1和s2是相同的,会返回0;如果s1的字典序在s2前面,则返回值会小于0;如果s1的字典序在s2后面,则返回值会大于0。strcpy(s1, s2)函数可以复制字符串 s2到字符串s1。如果s2比s1短,那么s1这个数组后面没被覆盖的部分不会改变。比如s1存的是{q, w, e, r, \0}, s2存的是{a, s, \0},那么使用strcpy(s1, s2)后,s1前五位应该是{a, s, \0, r, \0}。