总结数组相关知识

数组总结

一维数组

一维数组的定义和初始化

1.一维数组的定义

类型名 数组名[数组长度]
类型名指定数组中每个元素的类型;
数组名是数组变量的名称;
数组长度是一个整型常量表达式,设定数组的大小。

2.初始化

类型名 数组名[数组长度]={初值表};
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};
char arr4[3] = {‘a’,98, ‘c’};
char arr5[] = {‘a’,’b’,’c’};
//数组初始化时,如果全部元素都赋了初值,数组长度可以省略。
char arr6[] = “abcdef”;

一维数组的下标引用

除了优先级之外,下标引用和间接访问完全相同

例如:arr[7]与 *(arr+7)是等同的!

int array[10];
int *ap = array + 2;
//ap:array+2/&array[2]
//*ap:array[2]
//ap[0]:array[2]
//ap+6:array+8/&array[8]
//*ap+6:array[2]+6/间接访问优先级高于加法
//*(ap+6):array[8]
//ap[6]:array[8]
//ap[-1]:array[1]

一维数组在内存中的存储

一维数组在内存中是连续存放的,地址随下标的增长由低到高(即 下标小的元素占低地址 下标大的元素占高地址)

有关一维数组的运算

1数组名单独放在sizeof()内部,数组名表示整个数组,所以sizeof(数组名)计算的是整个数组的大小,单位为字节。
2&数组名,数组名表示整个数组,所以&数组名取的是整个数组地址。
3除此之外,所有数组名表示首元素的地址。

int a[] = {1,2,3,4};
printf("%d\n",sizeof(a));//4*4(一个整型占4个字节)=16(单位均为字节)
printf("%d\n",sizeof(a+0));//4(相当于首元素地址的大小)
printf("%d\n",sizeof(*a));//4(相当于首元素地址的大小)
printf("%d\n",sizeof(a+1));//4(第二个元素地址的大小)
printf("%d\n",sizeof(a[1]));//4(第二个元素地址的大小)
printf("%d\n",sizeof(&a));//4(整个数组地址的大小)
printf("%d\n",sizeof(&a+1));//4(下一个数组的地址的大小)
printf("%d\n",sizeof(&a[0]));//4(相当于首元素地址的大小)
printf("%d\n",sizeof(&a[0]+1));4(第二个元素地址的大小)

二维数组

二维数组的定义和初始化

1.二维数组的定义

类型名 数组名[行下标][列下标]
例如:
int a[3][2];//定义一个二维数组a,3行2列,共6个元素

2.二维数组的初始化

int arr[3][4] = {1,2,3,4};//顺序赋初值
int arr[3][4] = {{1,2},{4,5}};//分行赋初值
int arr[][4] = {{2,3},{4,5}};//省略行长度

二维数组在内存中的存储

以arr[3][4]为例:

这里写图片描述

arr[0]相当于第一行元素的数组名
arr[1]相当于第二行元素的数组名
arr[2]相当于第三行元素的数组名

有关二维数组的运算

int a[3][4] = {0};
printf("%d\n",sizeof(a));//12*4=48 表示二维数组的大小
printf("%d\n",sizeof(a[0][0]));//4 表示首元素的大小
printf("%d\n",sizeof(a[0]));//16=4*4 表示第一行的大小
printf("%d\n",sizeof(a[0]+1));//4 表示第一行第二个元素地址的大小
printf("%d\n",sizeof(a+1));//4 表示第二行的地址大小
printf("%d\n",sizeof(&a[0]+1));//4 第二行第一个元素地址大小
printf("%d\n",sizeof(*a));//16 第一行元素大小
printf("%d\n",sizeof(a[3]));//16 虽然超出了范围,但仍可计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值