作者邮箱:z_zhanghaobo@163.com
github相关: https://github.com/HaoboLongway/simple_examples
cpp中的数组,应用十分常见,数组由一系列元素组成。需要使用数组时,我们需要声明数组名,数组含元素的个数以及这些元素类型.
题目1-1-1:
以下哪个数组声明语句有误:
float candy[365];
char code[12];
int matrix[10][10];
int diag_arr[10][float [10]];
4.语句有误Console Error Log
: error: expected primary-expression before 'float'|
, error: expected ']' before 'float'|
数组被用来储存程序需要的数据,有时候一开始初始化数组比较好,初始化一个数组有多种方法,具体如下
- 直接赋值,花括号括起各值
...
//头文件略去
#define DAYS_OF_WEEK 7
int main(){
int schedule[DAYS_OF_WEEK] = {2, 3, 3, 5, 2, 0, 0};
for(int i=0; i<DAYS_OF_WEEK; i++){
cout<<"Day "<<i<<" has "<<schedule[i]<<" class(es)"<<endl;
}
return 1;
}
输出是
Day 0 has 2 class(es)
Day 1 has 3 class(es)
...
- 指定元素个数,编译器自动匹配数组值
#define SIZE 4
int main(){
int arr1[SIZE] = {1, 2}; //注意这里只提供了前两个值
int arr2[SIZE] = {1, 2, 3, 4, 5}; //注意这里提供值有溢出
...(略)
}
这里对应的arr1
及arr2
数组可以打印出来,为:
arr1 => 1, 2, 0, 0
而arr2
数组初始化则会报错,错误信息error: too many initializers for 'int [4]'|
, 告诉我们这里初始化的元素只可少不可多,此外,对于空缺的元素,编译器会自动填0.
-
省略方括号中的数字,自动匹配
下面的代码同样也是成立的
...
const int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31};
cout<<sizeof days/sizeof (int); //注意这种求数组元素个数的方式
输出4
即是days
内的元素个数
题目1-2-1:
指出下面数组arr
经代码中变换是否保持不变性
int arr[5][3] = {
{1, 2},
{1, 2},
{1, 2},
{1, 4},
{1, 8},
};
for(int i=1;i<4;i++){
arr[i][4-i] += arr[4-i][i];
arr[4-i][i] -= arr[i][4-i];
}
是不变的,可以运行出得此结论。
以上是初始化一个数组的基本方法,如果不进行初始化,其元素将是随机的,见下面的例子
...
int main(){
int a[20];
*a = 1; //等价写法: a[0] = 1;
cout<<"INDEX"<<setw(12)<<"VAL\n";
for(int i=0; i<20; i++){
cout<<setw(2)<<i<<setw(14)<<a[i]<<"\n";
//setw函数设置输出格式,在上面的例子中,i的打印按照右对齐
}
return 1;
}
...
某时刻运行得到
INDEX VAL
0 1
1 7208620
2 1977445653
3 1977762588
4 7208684
...
可见如果未进行赋值或初始化,数组内的值就是该存储区域的值,这通常不会是一件好事
杂谈:
-
使用宏定义
在上面的例子中,多个用到了宏定义,即#define <certain_variable>
,当用于数组大小长度时,这样设计更为方便 -
让编译器去自动得到长度
示例代码中使用了如sizeof eg_arr/ sizeof eg_arr[0]
的方法来获取eg_arr
的元素个数 -
关于多维数组
理解多维数组可以这样考虑
...
// rain 是一个储存各年各月降水量的数组
float rain[5][12];
// rain是一个内含五个元素的数组
// 每个元素内含12个float类型的数组
...
多维数组在计算机内部是顺序排列的
-
关于VLA(变长数组)
本节不涉及
其余文章:
数组与指针基础内容:
网友评论