目录
一、数组
二、数组占用内存的大小
三、数组的初始化
示例
运行效果
运行效果
四、二维数组
二维数组的初始化
示例
运行效果
运行效果
五、字符串
字符串的初始化
字符串的赋值
字符串数组
温馨提示
一、数组
数组array是一组数据类型相同的变量可以存放一组数据它定义的语法是
数据类型 数组名[数组长度];例如
double array[20];array是一个数组包含了20个元素每个元素都一个double类型的变量可以通过下标访问数组中元素element数组下标的编号从0开始数组的第1个元素是array[0]第2个元素是array[1]以此类推直到第20个元素array[19]。
给每个元素赋double类型的值可以这样写
array[0] 10.1; array[1] 10.2; array[2] 10.3; …… array[19] 3.14;定义数组的时候数组的长度必须是整数可以是常量也可以是变量。
数据的下标也必须是整数可以是常量也可以是变量。
使用数组元素和使用同类型的变量一样。
scanf(%lf, &array[4]); // 把一个值读入数组的第5个元素数组的类型可以是任意数据类型。
int no[20]; // 可储存20个int类型整数的数组 char yes[25]; // 可储存25个字符的数组 double haha[100]; // 可储存100个double类型整数的数组 二、数组占用内存的大小数组是有多个变量组成占用内存总空间的大小为多个变量占用的内存空间之和用sizeof数组名就可以得到整个数组占用内存的大小
int i[10]; // 定义一个整型数组变量 printf(i占用的内存大小为%dn,sizeof(i)); // i占用的内存大小为40 printf(int占用的内存大小为%dn,sizeof(int)); // int占用的内存大小为4 三、数组的初始化1. 采用memset函数对数组进行初始化
int array[10]; memset(array,0,sizeof(array));第一个参数是数组名第二个参数填0第三个参数是数组占用的内存总空间用sizeof(变量名)获取
2. 逐个初始化数组也可以使用一个初始化语句如下所示
double array[5] {1000.0, 2.0, 3.4, 7.0, 50.0};大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。
如果您省略掉了数组的大小数组的大小则为初始化时元素的个数。因此如果
double array[] {1000.0, 2.0, 3.4, 7.0, 50.0};您将创建一个数组它与前一个实例中所创建的数组是完全相同的。下面是一个为数组中某个元素赋值的实例
array[4] 50.0;上述的语句把数组中第五个元素的值赋为 50.0。所有的数组都是以 0 作为它们第一个元素的下标数组的最后一个下标是数组的总大小减去 1
图形表示
示例test28.c
#include<stdio.h>int main(){ int array[5];//array是一个包含5个整数的数组 int i,j; // 初始化数组元素 for (i 0; i < 5; i) { array[i]100i; } // 输出数组中每个元素的值 for (j 0;j < 5;j) { printf(array[%d] %dn,j,array[j]); } return 0;} 运行效果test29.c
#include <stdio.h>#include <string.h>int main(){ int i 0; int total 5; double weight[total]; //定义数组,存放同学的体重 double sum 0; memset(weight,0,sizeof(weight));//初始化数组为0 //循环输入同学的 体重,并求和 for (i 0;i < total;i) { printf(请输入第%d名同学的体重:,i1); scanf(%lf,&weight[i]); sumweight[i];// 5名同学体重的和 } printf(5名同学的平均体重为%lfn,sum/total);} 运行效果 四、二维数组一个二维数组在本质上是一个一维数组的列表
二维数组定义的语法是
数据类型 数组名[第一维的长度][第二维的长度]; int array[5][4];//定义一个5行4列的二维数组 array[0][0] array[0][1] array[0][2] array[0][3] array[1][0] array[1][1] array[1][2] array[1][3] array[2][0] array[2][1] array[2][2] array[2][3] array[3][0] array[3][1] array[3][2] array[3][3] array[4][0] array[4][1] array[4][2] array[4][3]也可以将二维数组看成一个坐标系有 x 轴和 y 轴要想在一个平面中确定一个点必须同时指定 x 和 y 值
二维数组的初始化1. 下面是一个带有 5 行 4 列的数组。
int array[5][4] { {0, 1, 2, 3} , /* 初始化索引号为 0 的行 */ {4, 5, 6, 7} , /* 初始化索引号为 1 的行 */ {8, 9, 10, 11} , /* 初始化索引号为 2 的行 */ {12,13,14, 15}, /* 初始化索引号为 3 的行 */ {16,17,18, 19} /* 初始化索引号为 4 的行 */};内部嵌套的括号是可选的下面的初始化与上面是等同的
int array[5][4] {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};2. 采用memset函数对二维数组进行初始化
int array[5][4];memset(array,0,sizeof(array)); 示例test30.c
#include<stdio.h>int main(){ //5行2列的二维数组 int a[5][2] { {0,0},{1,2},{2,4},{3,6},{4,8} }; int i,j; //输出数组中每个元素的值 for (i0;i<5;i) { for (j0;j<2;j) { printf(a[%d][%d]%dn,i,j,a[i][j]); } } return 0;} 运行效果test31.c
#include<stdio.h>#include<string.h>int main(){ int i 0; int j 0; int class 3;// 小组总数初始化为3 int total 5;// 每个组超女的总人数初始化为5 double weight[class][total];//定义二维数组存放同学的体重 double sum[class];// 定义一维数组存放同学体重的和 memset(weight,0,sizeof(weight)); //初始化数组为0 memset(sum,0,sizeof(sum)); // 采用两个循环第一级循环为小组数第二级循环为超女人数 for (i0;i<class;i) { for (j0;j<total;j) { printf(请输入第%d组第%d名同学的体重:,i1,j1); scanf(%lf,&weight[i][j]); sum[i]weight[i][j]; } } // 输出每组的平均体重 for (i0;i<class;i) { printf(第%d组同学的平均体重为:%lfn,i1,sum[i]/total); } return 0;} 运行效果 五、字符串字符串就是一个以空字符 结束的字符数组是一个特别的字符数组。空字符 也可以直接写成0
字符串需要用0结束在定义字符串的时候要预留多一个字节来存放0
char name[21]; // 定义一个最多存放20个字符的字符串 字符串的初始化字符串是数组可以用初始化数组的方法来初始化字符串
char strname[21]; memset(strname,0,sizeof(strname)); 字符串的赋值如果想在strname中存入字符串“xiaoqiu”可以用strcpy函数也可以采用以下代码
strcpy(strname,xiaoqiu); // 或者用以下代码 char strname[21]; memset(strname,0,sizeof(strname)); strname[0]x; strname[1]i; strname[2]a; strname[3]o; strname[4]q; strname[5]i; strname[6]u; strname[7] ; // 或者 strname[7]0; 字符串数组以0结束的一维字符数组是一个字符串
char strname[21]; // 可以存放20个字符的字符串 memset(strname,0,sizeof(strname)); strcpy(strname,hello xiaoqiu);给一维字符数组加上一维就是字符串数组了。
char strname[5][21]; // 5个字符串每个字符串可以存放20个字符 memset(strname,0,sizeof(strname)); strcpy(strname[0],老夫子); strcpy(strname[1],吕布); strcpy(strname[2],马超); strcpy(strname[3],夏洛特); strcpy(strname[4],花木兰); 温馨提示使用数组的时候编译器不会检查数组的下标是否正确但是在程序中下标一定不能越界如果程序运行时数组下标越界就相当于访问了其它程序的内存可能会导致程序异常中断。