数组

一、什么是数组?
数组是一组有序数据的集合,数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。

一维数组

一维数组的定义和初始化

定义:
<类型>数组名[<元素数量>]元素数量必须是大于零的整型常量表达式

int a[10];//表示定义了一个整型数组,数组名为a,数组名包含10个元素。

整型常量包括:字面常量,宏常量,常变量,枚举常量,运算结果为整型的表达式。
常量包括:字面常量,宏常量,常变量,枚举常量,字符常量,字符串常量。
注意:

  1. 数组的下标是从0开始,10个元素的下标是从0到9.
  2. 数组的组成:类型+大小,存储空间是连续的(数组看不见的属性),从 低地址到高地址,数组的类型是由元素的类型和数量所决定的。
  3. 数组未进行初始化时,默认元素为0,eg:给定数组int ar[]={};花括号中为空 时,数组中的元素被初始化为0;

初始化:

int main()
{
	int ar[3]={1,2,3};
	int ar[]={1,2,3};//给定数组成员,数组长度也就确定了;
	int ar[3]={1,3};//可以,第三个元素默认为0;
	int ar[n];//不可以,元素数量必须用常量或常量表达式;
}	

int len=sizeof(ar)/sizeof(ar[0])表示计算数组ar中的数组长度
数组名和sizeof一起用时,表示整个数组的字节数,其余情况都表示数组首元素

一维数组的使用

#include <stdio.h>
int main()
{
	int i=0;
	int ar[5]={};
	for{i=0;i<5;i++}
	{
		ar[i]=i;    //给数组元素赋值
	}
	for(i=0;i<5;i++)
	{
		printf("%d",ar[i]);  //打印数组需要用循环
	}
	return 0;
}
//还有一种常性数组const int ar[5]={1,2,3,4,5};表示数组元素只可读,不可写;

注意:

  1. 数组名作为首元素时,是一个指针常量,不能进行++ar或ar=ar+1,常量只能读值不能写值,在内存方面若移动整个数组会在内存中移动。
  2. 数组之间不能作为整体直接赋值(因为数组名是字符常量,赋值时左边必须为可变量)
  3. 数组在不同的地方有不同的叫法:在局部变量中定义叫数组,在函数中作为形参时为指针,作为形参时必须给行元素个数
  4. 数组指针里面存放的元素是地址
    在这里插入图片描述

二维数组

二维数组的定义

定义:类型名 数组名[行表达式] [列表达式]

int main()
{
	int ar[3][4];
	char ar[2][3];   //这里是未进行初始化的数组
	return 0}

二维数组的表示

物理表示:
在这里插入图片描述
逻辑表示:本质上,int ar[3][4],是由三个一维数组构成的,每个一维数组里面有四个元素
所以:int ar[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};在内存中如下图表示:
在这里插入图片描述

二维数组的初始化:

  1. 二维数组可以只对部分元素赋值,其他元素自动赋值为0
    eg:int ar[3][4]={1,2,3,4,5,6};表示ar[0]={1,2,3,4}; ar[1]={5,6,0,0}; ar[2]={0,0,0,0};

  2. 二维数组的初始化,第一维长度可以省略,第二维不可省。

int ar[][4]={1,2,3,4,5,6,7,8,9,10,11,12}
//表示每个一维数组有四个元素,编译器会将元素个数按每组四个元素进行分配
int ar[][4]={1,2,3,4,5,6};
//表示ar[0]={1,2,3,4};ar[1]={5,6,0,0};
int ar[][4]={{1,2},{3,4},{5,6}};
//表示ar[0]={1,2,0,0};ar[1]={3,4,0,0}等等;

二维数组的使用:

int main()
{
	int ar[3][4];
	int x=0;
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<4;j++)
		{
			ar[i][j]=++x;
		}
	}
	for (int i=0;i<3;++i)
	{
		for (int i=0;i<3;++i)
		{
			printf("&ar[%d][%d]=>0x%08x %d\n",i,j,&ar[i][j],ar[i][j]);
		}
	}
	return 0;
}

运行结果为:
在这里插入图片描述

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值