(1)一维数组的创建
Ⅰ.创建方式: 数据类型 数组名 [数组大小] = {初始化列表};
数据类型:是数组中所存的数据的类型,如int、double、char等。数组名:是数组的名字,命名要符合C语言标识符的命名规则(合法的标识符命名:①标识符由字母、下划线和数字组成;②第一个字符不能是数字,只能是下划线或者字母;③区分大小写,大写字母和小写字母不同即大小写的含义不同;④标识符的名称不能是C语言中的关键字,关键字是具有特定含义的标识符,用户只能根据系统的规定使用它们,如int是关键字,就不可以用来命名。)数组大小:是一个常量表达式,用来指定数组的大小。{初始化列表}:可要可不要,详细见一维数组的初始化。注:[数组大小]:“[ ]”中要给常量(如5)或者常量表达式(如 5+1)才可以,不能使用变量。Ⅱ.例:
int arr1[10];char arr2[5+4];int n = 10; int arr3[n];//不可以,因为n是变量,不是常量或者常量表达式。(2)一维数组的初始化
Ⅰ.初始化:若在数组的创建时,我们想不指定数组大小就必须要初始化,数组元素的个数根据初始化的内容来确定的。 Ⅱ.例:
int arr1[ ] = {1, 2, 3, 4, 5};int arr2[5] = {1, 2, 3, 4, 5};//也可以char arr3[ ] = {‘a’, ‘b’, ‘c’};//该数组有3个元素‘a’, ‘b’, ‘c’char arr4[ ] = “abc”;//该数组有4个元素,‘a’, ‘b’, ‘c’, ‘\n’注:像arr3和arr4如果按照字符串打印的话 printf("%s\n", arr1);//输出abc printf("%s\n", arr2);//会一直不停地输出abc,因为字符串是以’\n’结束的,而arr4没有字符串结束标志。(3)一维数组创建和初始化的使用
#include <stdio.h> #include <stdlib.h> int main() { int arr1[5];//数组的创建 char arr2[] = {'s', 'h', 'e', 'e', 'n', 'a', '\0'}; char arr3[] = "sheena"; //输出数组的所有元素 for(int i = 0; i < 5; ++i)//用for循环来访问数组中的所有元素。 { arr1[i] = (i + 1);//i为数组一块空间给元素分配各自空间的下标。下标从0开始。 printf("%d ", arr1[i]);//输出为1 2 3 4 5 } printf("\n"); printf("%s\n", arr2);//以字符串形式输出数组元素,结果为sheena printf("%s\n", arr3);//以字符串形式输出数组元素,结果为sheena int sz2 = sizeof(arr2) / sizeof(arr2[0]); int sz3 = sizeof(arr3) / sizeof(char); printf("%d\n", sz2);//结果为7 printf("%d\n", sz3);//结果为7,字符串最后都有一个'\0'。 system("pause"); return 0; } 数组元素是使用下标来访问的,下标是从0开始的数组大小的计算方法: sizeof(arr) / sizeof(arr[0]);或sizeof(arr) / sizeof(数组类型);(求数组大小的方法,先记着。为什么这样,详细见C语言之简单理解指针和深入理解数组名)(4)一维数组在内存中存储的形式
#include <stdio.h> #include <stdlib.h> int main() { int arr1[5] = {1, 2, 3, 4, 5}; for(int i = 0; i < 5; ++i) { printf("%p\n", &arr1[i]);//打印数组中每一个元素在内存中的空间的地址 } system("pause"); return 0; } 由上面显示的每个元素在内存中的空间的地址可得到,数组中每个元素地址空间大小相差为4个字节(刚好为数组中元素类型int的大小),故我们可知数组在内存中是一块连续的空间,数组是按照下标,由低到高依次存储的。如arr[0] ====> 0x 0001; arr[1] ====>0x 0002; arr[2] ====>0x 0003…(5)一维数组的练习题
/*求一个一维数组arr[] = {12, 31, 500, 1, 34, 12, 60, 100}中的元素最大值,最小值,及所有元素的和 该题就是一个简单的一维数组的遍历。 */ #include <stdio.h> int main() { int arr[] = { 12, 31, 500, 1, 34, 12, 60, 100 }; int sz = sizeof(arr) / sizeof(int); int sum = 0; int max = arr[0]; int min = arr[0]; for (int i = 0; i < sz; ++i) { sum += arr[i]; if(max < arr[i]) max = arr[i]; if (min > arr[i]) min = arr[i]; } printf("数组中元素的最大值为:%d\n", max);//结果为500 printf("数组中元素的最小值为:%d\n", min);//结果为1 printf("数组中的所有元素之和为:%d\n", sum);//结果为750 return 0; }(1)二维数组的创建 Ⅰ.创建方式:数据类型 数组名[常量表达式(行大小)][常量表达式(列大小)];
规则和一维数组一样,唯一不同就是二维数组在创建时,数组大小分为行大小和列大小,故此时数组的大小为行大小乘以列大小。Ⅱ.例:
int arr1[2][3];//两行三列char arr2[3][4];//三行四列double arr3[4][7];//四行七列(2)二维数组的初始化 Ⅰ.初始化:若在数组的创建时,我们想不指定数组大小就必须要初始化,数组元素的个数根据初始化的内容来确定的。但是在二维数组初始化时,只可以省略行大小,但是不可以不写列元素。
Ⅱ.例:
int arr1[2][3] = {{1, 2, 3}, {4, 5, 6}};//{1, 2, 3}为第一行元素 {4, 5, 6}为第二行元素int arr2[2][3] = {{1, 2}, {4}}//{1, 2}为第一行元素,{4}为第二行元素。但是当每一行元素初始化时没有填满,C语言自动填充为0。故该数组第一行元素为{1, 2, 0},第二行元素为{4, 0, 0}。int arr3[2][3] = {1, 2, 3, 4};//也可以这样初始化化,此时元素不够的也自动填充为0,故该数组第一行元素为{1, 2, 3},第二行元素为{4, 0, 0}。int arr4[][3] = {{1, 2}, {4}};//可以省略行大小,可以根据列大小推出行大小,故该数组为两行,第一行元素为{1, 2, 0},第二行元素为{4, 0, 0}。int arr5[2][3] = {0};//该情况表示将数组中的所有元素都初始化为0,故该数组第一行元素为{0, 0, 0},第二行元素为{0, 0, 0}。(3)二维数组创建和初始化的使用
#include <stdio.h> int main() { int arr[2][3] = { { 1, 2 },{ 4, 3, 5 } }; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; } 二维数组的大小的求法有两种: ①行大小乘列大小 row * column ②sizeof(arr) / sizeof(数组类型); 或sizeof(arr) / sizeof(arr[0][0]);(4)二维数组在内存中存储的形式
#include <stdio.h> #include <stdlib.h> int main() { int arr[2][3] = { { 1, 2 },{ 4, 3, 5 } }; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { printf("&arr[%d][%d] = %p ", i, j, &arr[i][j]); } printf("\n"); } return 0; } 由上图可知二维数组在内存中的存储和一维数组是一样的,也是一块连续的空间。数组是按照下标,由低到高依次存储的。在这个层面上说,其实二维数组在内存中就是一维数组,只不过我们可以把它按照二维数组的形式输出显示在我们眼前。()二维数组的练习题
//求一个二维数组arr[2][3] = {66, 77, 33, 44, 55, 10}中的元素最大值,最小值,及所有元素的和 #include <stdio.h> int main() { int arr[2][3] = {66, 77, 33, 44, 55, 10}; int sum = 0; int max = arr[0][0]; int min = arr[0][0]; int sz = sizeof(arr) / sizeof(int);//求二维数组大小 int row = sz / 3;//二维数组大小为行大小乘列大小 for (int i = 0; i < row ; ++i) { for (int j = 0; j < 3; ++j) { sum += arr[i][j]; if (max < arr[i][j]) max = arr[i][j]; if (min > arr[i][j]) min = arr[i][j]; } } printf("数组中元素的最大值为:%d\n", max);//结果为77 printf("数组中元素的最小值为:%d\n", min);//结果为10 printf("数组中的所有元素之和为:%d\n", sum);//结果为285 return 0; }