下面随笔给出C++数组的存储与初始化的细节内容。

数组的存储与初始化

一维数组的存储

数组元素在内存中顺次存放,它们的地址是连续的。元素间物理地址上的相邻,对应着逻辑次序上的相邻。

例如:

一维数组的初始化

在定义数组时给出数组元素的初始值。

  • 列出全部元素的初始值

例如:static int a[10]={0,1,2,3,4,5,6,7,8,9};

  • 可以只给一部分元素赋初值

例如:static int a[10]={0,1,2,3,4};

  • 在对全部数组元素赋初值时,可以不指定数组长度

例如:static int a[]={0,1,2,3,4,5,6,7,8,9}

二维数组的存储

  • 按行存放

例如: float a[3][4];

可以理解为:

其中数组a的存储顺序为:

a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23

二维数组的初始化

  • 将所有初值写在一个{}内,按顺序初始化

    • 例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12

  • 分行列出二维数组元素的初值

    • 例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

  • 可以只对部分元素初始化

    • 例如:static int a[3][4]={{1},{0,6},{0,0,11}};

  • 列出全部初始值时,第1维下标个数可以省略

    • 例如:static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

    • 或:static int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

注意:

  • 如果不作任何初始化,内部auto型数组中会存在垃圾数据,static数组中的数据默认初始化为0;

  • 如果只对部分元素初始化,剩下的未显式初始化的元素,将自动被初始化为零;

  • 现在我们来看一个用数组存放Fibonacci数列的例子。

例: 求Fibonacci数列的前20项

 1 #include <iostream>
2
3 using namespace std;
4
5 int main() {
6
7 int f[20] = {1,1}; //初始化第0、1个数
8
9 for (int i = 2; i < 20; i++) //求第2~19个数
10
11 f[i] = f[i - 2] + f[i - 1];
12
13 for (int i=0;i<20;i++) { //输出,每行5个数
14
15 if (i % 5 == 0) cout << endl;
16
17 cout.width(12); //设置输出宽度为12
18
19 cout << f[i];
20
21 }
22
23 return 0;
24
25 }

运行结果:

例:循环从键盘读入若干组选择题答案,计算并输出每组答案的正确率,直到输入ctrl+z为止。

 1 每组连续输入5个答案,每个答案可以是'a'..'d'。
2
3 例: 一维数组应用举例
4
5 #include <iostream>
6
7 using namespace std;
8
9 int main() {
10
11 const char key[ ] = {'a','c','b','a','d'};
12
13 const int NUM_QUES = 5;
14
15 char c;
16
17 int ques = 0, numCorrect = 0;
18
19 cout << "Enter the " << NUM_QUES << " question tests:" << endl;
20
21 while(cin.get(c)) {
22
23 if(c != '\n') {
24
25 if(c == key[ques]) {
26
27 numCorrect++; cout << " ";
28
29 } else
30
31 cout<<"*";
32
33 ques++;
34
35 } else {
36
37 cout << " Score " << static_cast<float>(numCorrect)/NUM_QUES*100 << "%";
38
39 ques = 0; numCorrect = 0; cout << endl;
40
41 }
42
43 }
44
45 return 0;
46
47 }

最新文章

  1. hihoCoder 1160 攻城略地
  2. 单位px 转换成 rem
  3. CRF图像语义分割
  4. 使用ICSharpZipLib将文件夹压缩为zip文件
  5. Qt入门(18)——使用信号和槽连接控件
  6. UVA253 Cube painting(数学)
  7. 批量设置AssetBundleName
  8. android App Widgets
  9. nginx切割日志脚本
  10. 【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)
  11. Haproxy + Keepalived +PXC 常见错误
  12. CWMP开源代码研究6——libcwmp动态库开发
  13. Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
  14. bootstrap 3列表单布局
  15. Distance
  16. Socket/ServerSocket 选项
  17. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) B - Bear and Friendship Condition 水题
  18. 文件I/0缓冲
  19. RGB-D数据集(SLAM的和行人检测的)
  20. 自然语言交流系统 phxnet团队 创新实训 个人博客 (四)

热门文章

  1. 用Python修改本机适配器信息
  2. Codeforces Global Round 12 D. Rating Compression (思维,双指针)
  3. 史上最全Redis面试题(含答案):哨兵+复制+事务+集群+持久化等
  4. 连接MongoDb数据库 -- Python
  5. 从网络I/O模型到Netty,先深入了解下I/O多路复用
  6. 洛谷p1198 最大数
  7. iPhone 如何查看 Wi-Fi 密码
  8. pagehide event &amp; sendBeacon
  9. ES2015 (ES6) 新特性: 20 个
  10. 如何实现 React 模块动态导入