一、数组
1、数组概念
是C语言中一种复合的数据类型,是多个相同类型的数据的集合。
2、数组的分类
1》一维数组
2》多维数组
3》变长数组
3、一维数组
多个相同类型变量的集合。
1》定义:
元素的数据类型 数组名[元素的个数],元素指的是数组中的数据,例如:
int array[5]; //array为数组名,数组元素为:array[0],array[1],array[2],array[3],array[4],int是数组元素的类型
[] 为下标运算符,可以理解为定义数组的标志。
2》初始化:
1)完全初始化:按顺序依次给数组的每一个元素赋值
int arr[5] = {1,2,3,4,5};
int arr[] = {1,2,3,4,5};
char str[6] = {'h','e','l','l','o','\0'};
char str[6] = {"hello"};
char str[] = "hello";
2)部分初始化:按顺序依次给数组的前若干个元素赋值,例如
int arr[5] = {1,2,3};
char str[20] = "hello";
3)指定元素初始化:不按是顺序指定数组中的某些元素赋值,例如
int arr[10] = {[3]=30,40,50,[8]=80,[4] = 400};
3》使用
1)赋值:数组不能整体赋值,例如:
int a[5];
a = {1,2,3,4,5}; //错误
a[5] = {1,2,3,4,5}; //错误
int i;
for(i = 0; i < 5; i++)
a[i] = i+1;
或
scanf("%d",&a[i]);
2)打印:也必须分别打印数组中的每一个元素,例如:
for(i = 0; i < 5; i++)
printf("%d ",a[i]);
3)数组作为函数实参传递:
传:数组名 和 元素个数
例如:int a[5] = {1,2,3,4,5};
1、数组概念
是C语言中一种复合的数据类型,是多个相同类型的数据的集合。
2、数组的分类
1》一维数组
2》多维数组
3》变长数组
3、一维数组
多个相同类型变量的集合。
1》定义:
元素的数据类型 数组名[元素的个数],元素指的是数组中的数据,例如:
int array[5]; //array为数组名,数组元素为:array[0],array[1],array[2],array[3],array[4],int是数组元素的类型
[] 为下标运算符,可以理解为定义数组的标志。
2》初始化:
1)完全初始化:按顺序依次给数组的每一个元素赋值
int arr[5] = {1,2,3,4,5};
int arr[] = {1,2,3,4,5};
char str[6] = {'h','e','l','l','o','\0'};
char str[6] = {"hello"};
char str[] = "hello";
2)部分初始化:按顺序依次给数组的前若干个元素赋值,例如
int arr[5] = {1,2,3};
char str[20] = "hello";
3)指定元素初始化:不按是顺序指定数组中的某些元素赋值,例如
int arr[10] = {[3]=30,40,50,[8]=80,[4] = 400};
3》使用
1)赋值:数组不能整体赋值,例如:
int a[5];
a = {1,2,3,4,5}; //错误
a[5] = {1,2,3,4,5}; //错误
int i;
for(i = 0; i < 5; i++)
a[i] = i+1;
或
scanf("%d",&a[i]);
2)打印:也必须分别打印数组中的每一个元素,例如:
for(i = 0; i < 5; i++)
printf("%d ",a[i]);
3)数组作为函数实参传递:
传:数组名 和 元素个数
属于地址传递:可以在被调用函数中修改实参。
#include <stdio.h>
void fun1(int b[],int n)
{
int i;
for(i = 0; i < n;i++)
printf("%d\t",b[i]);
printf("\n");
}
void fun2(int b[],int n)
{
int i;
for(i = 0; i < n;i++)
b[i] *= 2;
}
int main(void)
{
int a[5];
int i;
printf("sizeof(a) = %d\n",sizeof(a));
for(i = 0; i < 5;i++)
scanf("%d",&a[i]);
fun1(a,5);
fun2(a,5);
fun1(a,5);
return 0;
}
4》存储:
例如:int a[5] = {1,2,3,4,5};
4、多维数组
本质是数组的数组,也就是说多维数组的元素是数组类型。
在定义时有多个下标运算符则该数组就是多维数组,下标运算符的个数决定数组的维数
1》定义:
元素的数据类型 数组名[元素个数][元素个数]......[元素个数];
例如:
int a[2][3];
解释:
2表示二维数组a的元素个数为2,元素分别是a[0],a[1],
3表示a[0]和a[1]的元素个数,
int表示a[0],a[1]中的元素类型,
a[0]的元素为a[0][0],a[0][1],a[0][2],它们的都是int
a[1]的元素为a[1][0],a[1][1],a[1][2],它们的都是int
2》初始化:
1)完全初始化:按顺序依次给数组的每一个元素赋值
int arr[2][3] = {{1,2,3},{4,5,6};
int arr[][3] = {{1,2,3},{4,5,6};
2)部分初始化:按顺序依次给数组的前若干个元素赋值,例如
int arr[2][3] = {{1,2}};
3)指定元素初始化:不按是顺序指定数组中的某些元素赋值,例如
int arr[3][4] = {[1]={[2]=20},[0]={[1]=10}};
<span style="white-space:pre"> </span> int a[3][4] = {[1]={[2]=20},[0]={[1]=10}};
int i,j;
for (i=0;i < 3; i++) {
<span style="white-space:pre"> </span>for (j = 0; j < 4; j++)
<span style="white-space:pre"> </span>printf("a[%d][%d]:%d\t",i,j,a[i][j]);
<span style="white-space:pre"> </span>printf("\n");
}
<span style="white-space:pre"> 3》使用:
<span style="white-space:pre"> </span>1)赋值:数组不能整体赋值,例如:
<span style="white-space:pre"> </span>int a[2][3];
<span style="white-space:pre"> </span>a = {{1,2,3},{4,5,6}}; //错误
<span style="white-space:pre"> </span>a[2][3] = {{1,2,3},{4,5,6}}; //错误
<span style="white-space:pre"> </span>int i,j;
<span style="white-space:pre"> </span>for(i = 0; i < 2; i++)
<span style="white-space:pre"> </span>for(j = 0; j < 3;j++)
<span style="white-space:pre"> </span>a[i][j] = i+1+j;
<span style="white-space:pre"> </span>或
<span style="white-space:pre"> </span>scanf("%d",&a[i][j]);
<span style="white-space:pre"> </span>2)打印:也必须分别打印数组中的每一个元素,例如:
<span style="white-space:pre"> </span>int i,j;
<span style="white-space:pre"> </span>for(i = 0; i < 2; i++)
<span style="white-space:pre"> </span>for(j = 0; j < 3;j++)
<span style="white-space:pre"> </span>printf("%d",a[i][j]);
<span style="white-space:pre"> </span>3)数组作为函数实参传递:
<span style="white-space:pre"> </span>传:数组名 和 元素个数
<span style="white-space:pre"> </span>属于地址传递:可以在被调用函数中修改实参。</span>
<span style="white-space:pre"> </span><pre name="code" class="cpp">#include <stdio.h>
void fun1(int n,int m,int b[ ][m])
{
int i,j;
for(i = 0; i < n; i++)
for(j = 0; j < m;j++)
scanf("%d",&b[i][j]);
}
void fun2(int n,int m,int b[ ][m])
{
int i,j;
for(i = 0; i < n; i++){
for(j = 0; j < m;j++)
printf("%d\t",b[i][j]);
printf("\n");
}
}
int main(void)
{
/*
int a[3][4] = {[1]={[2]=20},[0]={[1]=10}};
int i,j;
for(i=0;i < 3; i++){
for(j = 0; j < 4; j++)
printf("a[%d][%d]:%d\t",i,j,a[i][j]);
printf("\n");
}
*/
int a[2][3];
//a = {{1,2,3},{4,5,6}}; //错误
//a[2][3] = {{1,2,3},{4,5,6}}; //错误
int i,j;
//给数组赋值
fun1(2,3,a);
//打印数组元素
fun2(2,3,a);
return 0;
}
<span style="white-space:pre"> 4》存储:
<span style="white-space:pre"> </span>在内存中连续存储,例如:
</span>
<span style="white-space:pre"> <img src="https://img-blog.csdn.net/20160919234014309?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span>
<span style="white-space:pre">5、变长数组
<span style="white-space:pre"> </span>在定义数组时,数组的元素个数通过整型变量指定的数组称之为变长数组,例如:
<span style="white-space:pre"> </span>int n,m;
<span style="white-space:pre"> </span>n = 2;
<span style="white-space:pre"> </span>m = 3;
<span style="white-space:pre"> </span>int a[n][m]; //a为变长数组
<span style="white-space:pre"> </span>注意:
<span style="white-space:pre"> </span>1》定义变长数组时,变量的值必须确定,且大于零
<span style="white-space:pre"> </span>2》不能初始化
<span style="white-space:pre"> </span>3》必须是自动存储类型(只能定义在代码块内)
</span>