c语言数组基础知识及用法

数组

数组的概念

概念:数组是一组相同类型元素的集合(数组中的数据必须是相同类型的)

一维数组的创建和初始化

数组的创建

数据存放的类型  数组名字[常量值];

[]中存放的是数组元素的个数,并且所有的元素类型是相同的

比如:想在一个数组中存放10个整数

int arr[10]

这就创建了一个int类型的数组,数组名字是arr,数组中有10个元素

而且还可以创建别的类型的数组

char ch[5]
float lf[15]

数组的初始化

数组的初始化用大括号,然后把数据放到大括号中

int arr[5]={1,2,3,4,5};
//这个是完全初始化
int arr[5]={1,2};
//不完全初始化,这个就是前两个元素中存放的是1,2其他三个存放的是0
int  arr[5]={1,2,3,4,5,6,};
//这种是错误的,因为数据的数量多余元素个数

数组的类型

int arr[15] = { 0 };//int只是数组中元素的类型,而整个数组的类型应该是int [15]

由上面可以看出数组的类型应该是数据类型[元素个数]

一维数组的使用

数组的下标

要想访问元素中的数据应该用对应的下标来访问,下标是从0开始的

假如有这样一个数组:

int arr[5]={1,2,3,4,5};
数组 1 2 3 4 5
下标 0 1 2 3 4

可用[]来访问一个下标的对应元素比如[2]访问的就是3,[4]访问的就是5

[]叫做下标引用操作符

比如:

int main()
{
	int arr[5] = { 1,2,3,4,5 };
	printf("%d", arr[2]);
	return 0;
}

c语言数组基础知识及用法_第1张图片

数组在屏幕上的打印

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	return 0;
}

我们要是想将上面代码的10个元素都打印出来可以:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10};
	int i = 0;
	for (i = 0;i <= 9;i++)
	{
		printf("%d\n", arr[i]);
	}
	return 0;
}

首先,创建了1个元素类型为int的数组,里面有10个元素,并且进行了完全初始化

又创建了1个名字为i的整形变量,然后写一个for循环,i作为整个数组的下标应该是从0开始的所以将i的初始化设为0,将整个数组的访问应该有9个这样就可以打印出来了

c语言数组基础知识及用法_第2张图片

要是想要从键盘上接收10个数据,然后在屏幕上打印出来可以:

int main()
{
	int arr[10] = {0};
	int i = 0;
	for (i = 0;i <= 9;i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0;i <= 9;i++)
	{
		printf("%d\n", arr[i]);
	}
	return 0;
}

这样就可以打印出来了

打印出数组的地址

int main()
{
	int arr[10] = {0};
	int i = 0;
	
	for (i = 0;i <= 9;i++)
	{
		printf("%p\n",&arr[i]);
	}
	return 0;
}

%p在c语言中就是专门用来打印地址的,打印出来的格式是16进制的,并且前面的0不会省略

c语言数组基础知识及用法_第3张图片

可以看出地址的大小是按4字节逐步递增的,并且可以看出数组在内存中是连续存放的。

sizeof计算数组的大小

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d", sizeof(arr));
	return 0;
}

sizeof计算的是数组的大小单位是字节,上面代码有十个元素,元素类型是int类型,一个int类型占4字节,所以上面代码整个数组总大小是40字节

也可以用sizeof计算数组中元素的个数,可以用数组的总大小除以数组元素单个元素的大小可以用以下方法:

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d", sizeof(arr) / sizeof(arr[0]));
	return 0;
}

已知数组总大小是40,因为一个int类型数组的元素大小是4,所以数组元素个数是10。

动态计算数组元素个数并且打印出对应元素

int main()
{
	int arr[] = { 1,2,3,4,5 };
	int gs = sizeof(arr) / sizeof(arr[0]);//将数组的元素个数赋值给gs
	int i = 0;
	for (i = 0;i < gs;i++)//下标是从0开始的,并且一定是小于元素个数的
	{
		printf("%d ", arr[i]);
	}


	return 0;
}
int main()
{
	int arr[] = { 1,2,3,4,5,7,8,9 };
	int gs = sizeof(arr) / sizeof(arr[0]);//将数组的元素个数赋值给gs
	int i = 0;
	for (i = 0;i < gs;i++)
	{
		printf("%d", arr[i]);
	}


	return 0;
}

这样想打印那些数字改变数组的初始化部分就可以了

sizeof和strlen的区别

sizeof是计算数组的大小的单位是字节,strlen是计算字符串长度的而且只能针对于字符串。

二维数组的创建

二维数组的基本结构

元素类型 数组名[常量值][常量值]//第一个括号代表的是二维数组有几行,第二号括号代表数组有几列
   int arr[2][5]//数组中每个元素的类型是int,名字是arr,二维数组有2行5列

二维数组的初始化

不完全初始化

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

和一维数组一样,将前三个元素分别定义为1,2,3然后其他的元素都是0

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

二维数组是以行为基准向后打印的

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

二维数组在初始化时可以用大括号的方式指定几个数在同一行比如{1,2,3}就可以让这三个数在第一行,4,5就要在第二行开始往后排了。

但是不可以把第二个大括号去了,编译器会报错。

比如这样:

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

注意:如果用小括号,会被当成逗号表达式

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

只会打印2和4

完全初始化

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

将第一行的元素定义为1,2,3第二行的元素定义为4,5,6。

二维数组初始化可以省略行,不可以省略列

int arr[][3]={1,2,3,4,5,6,7,8,9,10};
1 2 3
4 5 6
7 8 9
10 0 0

二维数组的使用

二维数组的下标

二维数组的行是从0开始的,列也是从0开始的。

int arr[3][5]={1,2,3,4,5, 6,7,8,9,10, 11,12,13,14,15};
下标0 下标1 下标2 下标3 下标4
下标0 1 2 3 4 5
下标1 6 7 8 9 10
下标2 11 12 13 14 15

​ 如果要在屏幕上打印8,它对应的下标是1行2列那么就可以写一段代码来求这个数

int arr[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
printf("%d",arr[1][2]);

在这里插入图片描述

二维数组的输入和输出

int main()
{
	int arr[2][3] = { 0 };
	int i = 0;
	int j = 0;
//输入数组里各个元素的值
	for (i = 0;i <= 1;i++)//假设i为行,行的下标是从0开始,到1结束
	{
		for (j = 0;j <= 2;j++)//假设j为列,下标从0开始,到2结束
		{
			scanf("%d", &arr[i][j]);
		}
	}
	//输出各个元素的值
	for (i = 0;i <= 1;i++)
	{
		for (j = 0;j <= 2;j++)//下标从0行开始访问,依次访问0行0列,0行1列,0行2列,访问结束后换行
		{
			printf("%d",arr[i][j]);//打印对应下标元素的值k
		}
printf("\n");
	}
	return 0;
}

;
int i = 0;
int j = 0;
//输入数组里各个元素的值
for (i = 0;i <= 1;i++)//假设i为行,行的下标是从0开始,到1结束
{
for (j = 0;j <= 2;j++)//假设j为列,下标从0开始,到2结束
{
scanf(“%d”, &arr[i][j]);
}
}
//输出各个元素的值
for (i = 0;i <= 1;i++)
{
for (j = 0;j <= 2;j++)//下标从0行开始访问,依次访问0行0列,0行1列,0行2列,访问结束后换行
{
printf(“%d”,arr[i][j]);//打印对应下标元素的值k
}
printf(“\n”);
}
return 0;
}








你可能感兴趣的:(c语言)