C初阶2:数组

2019-11-13 作者:计算机教程   |   浏览(110)

初始化一个多维数组,初始化多维数组

《C和指针》第8章编程练习第1题:

图片 1

 1 /*
 2 ** 初始化一个数组,其特定位置初始化为特定的值
 3 */
 4 
 5 static unsigned char char_value[3][6][4][5] = {
 6     { // 0
 7         { // 0,0
 8             { 0 } // 0,0,0
 9         }
10     },
11     { // 1
12         { // 1,0
13             { 0 } // 1,0,0
14         },
15         { // 1,1
16             { 0 },     // 1,1,0
17             { 0, ' ' } // 1,1,1
18         },
19         { // 1,2
20             { 0 },              // 1,2,0
21             { 0 },              // 1,2,1
22             { 0, 0, 0, 'A' },   // 1,2,2
23             { 0, 0, 0, 0, 'x' } // 1,2,3
24         },
25         { // 1,3
26             { 0 },         // 1,3,0
27             { 0 },         // 1,3,1
28             { 0, 0, 0xf3 } // 1,3,2
29         },
30         { // 1,4
31             { 0 },            // 1,4,0
32             { 0 },            // 1,4,1
33             { 0, 0, 0, 'n' } // 1,4,2
34         },
35         { // 1,5
36             { 0 } // 1,5,0
37         }
38     },
39     { // 2
40         { // 2,0
41             { 0 } // 2,0,0
42         },
43         { // 2,1
44             { 0 },         // 2,1,0
45             { 0, 0, 0320 } // 2,1,1
46         },
47         { // 2,2
48             { 0 },          // 2,2,0
49             { 0, '0' },     // 2,2,1
50             { 0, 0, ''' }, // 2,2,2
51             { 0, '121' }   // 2,2,3
52         },
53         { // 2,3
54             { 0 } // 2,3,0
55         },
56         { // 2,4
57             { 0 },           // 2,4,0
58             { 0 },           // 2,4,1
59             { 0 },           // 2,4,2
60             { 0, 0, '3', 3 } // 2,4,3
61         },
62         { // 2,5
63             { 0 },              // 2,5,0
64             { 0 },              // 2,5,1
65             { 0 },              // 2,5,2
66             { 0, 0, 0, 0, 125 } // 2,5,3
67         }
68     }
69 };

 

http://www.bkjia.com/Cyy/924902.htmlwww.bkjia.comtruehttp://www.bkjia.com/Cyy/924902.htmlTechArticle初始化一个多维数组,初始化多维数组 《C和指针》第8章编程练习第1题: 1 /* 2 ** 初始化一个数组,其特定位置初始化为特定的值 3 */ 4 5...

4.5 二维数组输入

int n,m;scanf("%d%d",&n,&m);int arr[n][m];for (int i=0;i<n;  i){ for (int j=0;j<m;  j){ scanf("%d",&arr[i][j]); }}

练习

  1. 输入m个学生的n门课程成绩,输出各门课程成绩以及总成绩和平均值。
  2. 二维数组通常可用于表示数学中的矩阵。实现矩阵基本运算(加法、减法、数乘、转置)

1.3 大小

试一下,下面代码分析结果。

char carr[12];int iarr[12];double farr[12];printf("carr = %dn",sizeof;printf("iarr = %dn",sizeof;printf("farr = %dn",sizeof;

sizeof给出整个数组所占据的内容的大小。数组大小=元素大小*数组个数。

问题:已知数组arr,如何求出数组元素个数?

1.1 整体初始化

试一下下面三段代码,分析输出。

  • 代码一
int arr[12];for(int i=0;i<12;  i){ printf("%d ",arr[i]);}
  • 代码二
int arr[12] = {0};for(int i=0;i<12;  i){ printf("%d ",arr[i]);}
  • 代码三
int arr[12] = {2};for(int i=0;i<12;  i){ printf("%d ",arr[i]);}

结论:

  1. 数组未初始化,数组里面的值都是随机值。
  2. 数组初始化为{0},数组里面的值都是0
  3. 数组初始化为{非零值},数组里面第一个值是非零值,其他的值都是0

5.1 const数组是什么?

const int arr[]={1,2,3,4,5,};

数组变量已经是const指针,表示数组中的每一个元素都是const int,即每个元素不能通过arr改变。例如:

const int arr[]={1,2,3,4,5,};arr[0] = 0;

4.6 简化

初始化二维数组可以有如下简化写法:

  1. 省略内部嵌套括号。
int days[4][3]={31,28,31,30,31,30,31,31,30,31,30,31};
  1. 省略第一维大小,第二维不能省略。
int days[][3]={31,28,31,30,31,30,31,31,30,31,30,31};

问题二维数组可以整体初始化吗?

1.4 赋值

试一下下面的代码

int days[]={31,28,31,30,31,30,31,31,30,31,30,31};int arr = days;

数组名是数组第一个元素的地址。数组下标实现的操作指针也可以实现。

No. 操作 下标 指针
1 i个元素值 arr[i] *
2 i个元素地址 &arr[i] arr i

所以,遍历数组可以是

int arr[] = {1,2,3,4,5,6,7,8};for(int i=0;i<8;  i){ printf("%dn",*; }

数组名是不可改变的。

数组下标比较易于理解,数组指针更灵活更高效。

4.1 声明

  • 语法
类型 数组名[元素个数1][元素个数2]...[元素个数N];

多维数组最常用形式是二维数组。二维数组相当于一个行列组成的表。

类型 二维数组名[行数][列数];

例如下面是一个43列元素类型为int的表。

int days[4][3];

3.1 传递数组给函数

数组作为函数参数时,通常必须再用一个参数传入数组大小。

返回值类型 函数名(类型 参数名[],int size){}

或者

返回值类型 函数名(类型* 参数名,int size){}

数组作为参数时,数组退化成指针,不能利用sizeof获取数组大小,也就不能计算数组元素个数。

  • 练习
    1. 打印数组所有元素。
    2. 将一维数组的常用操作(查找、替换、添加、删除)封装成函数。
    3. 一个长度为n数组,前m个数字和后面的m-n个数字是增序的,如何将数组整体合并成一个增序的数组。

本文由www.2003.com发布于计算机教程,转载请注明出处:C初阶2:数组

关键词: