(七)数组

一、数组
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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值