c语言之门之数组

数组特点

由类型相同的元素组成的集合
空间连续

一维数组

格式

类型+数组名+[元素个数]

int a[10]

定义(初始化)

int a[4]={1,2,3,4};

也可以

int a[4]={1,2};//后面两个数初始化为0

因此当需要初始化一个很长的数组时

int a[100]={0};//所有数初始化为0

初始化指定元素

int a[4]={1[4]=12};//

c99新规定的标准,不是所以编译器都支持,请自行测试

定义时候不加元素个数:

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

一定要初始化,最终数组的元素个数由初始化的数据个数决定

数组元素的访问

通过下标访问

int a[4]={1,2,3,4};//4代表元素个数
a[0]//0代表元素的下标
a[1]
a[2]
a[3]

一个是数组一个是下标运算,要分清楚
下标与元素个数的关系是:最大下标是元素个数-1

元素赋值

格式

a[0]=1;a[1]=2....a[10]=5;

or

scanf_s("%d",&a[0]);

注意点

可以是整型表达式

scanf_s("%d",&a[2+1]);

or

int a=5
scanf_s("%d",&a[a+1]);

数组名字是常量,不能赋值
int a[4]={1,2,3,4}只能在定义时候使用

一维数组地址

求数组大小

	printf("%d\n",sizeof(a));//求出数组的字节数

取地址操作

int a[5]={1,2,3,4,5};
	printf("%d\n",&a[0]);//取地址
	printf("%d,%d”,&a[0]+1&a[0]+2);//地址偏移
	printf("%d,%d”,&a+1&a+2);//地址偏移&a

地址偏移和地址偏移&a是不同的,第一个是数组里面的地址往前加一个元素的的字节
第二个是在数组的地址往前加一个数组的字节

二维数组

声明和初始化

概念

元素是一维数组的一维数组即为二维数组

声明

int a[x][y]={{});//a是数组名,x,y分别是1个一维数组

初始化

格式

int a[x][y]=({,},{,},{,});//a是数组名,x,y分别是1个一维数组
printf("%d",sizeof(a));

int main(void)

{
	
	int a[3][2]={{1,2},//完整初始化
	             {3,4},
	            {5,6}};
	printf("%d",sizeof(a));
	
	system("pause");
		return 0;
}

用行列式可以方便理解

初始部分元素
1、

int a[3][2]={{1,2},{3,4}};//未指定默认初始化为0
int a[3][2]={{1},{3,4}};//未指定默认初始化为0

2、

int a[3][2]={1,2,3,4,5};//按数据顺序往内存中存,最后一个元素默认为0

3、

int a[][2]={{1,2},{3,4}};//必须先初始化才能省略

二维数组地址

printf("%d,",&a[0][0]);//单个元素地址
printf("%d,",&a[0]);//一个一维数组的地址
printf("%d,",&a);//数组a的地址

数组之间的赋值

利用循环对对应元素赋值

int a[x]={};
int b;
for(i=0,i<5;i++)
{
a[i]=b[i];;
}

memcpy()

#include <memory.h>//要加头文件

memcpy(b,a,sizeof(数据类型)*字节数
)//将a复制到b


一维数组

#include<stdio.h>
#include<stdlib.h>
#include <memory.h>

int main(void)
{

	int a[5]={1,2,3,4,5};
	int b[5];
	memcpy(b,a,sizeof(int)*5);
	system("pasue");
	return 0;

}

可以部分赋值

memcpy(&b[0],&a[2],sizeof(int)*3);//不能越界赋值,不能用数组名赋值

不能越界赋值,不能用数组名赋值

二维

int a[3][2]={1,2,3,4,5};
	int [3][2];
memcpy(&b[0][0],&a[2][0],sizeof(int)*6);

多维数组

int a[2][3][4]={{{1,2,3,4},{1,2,3,4},{1,2,3,4}},{{1,2,3,4},{1,2,3,4},{1,2,3,4}}};
	a[0][0][0];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值