总结数组相关知识
数组总结
一维数组
一维数组的定义和初始化
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 虽然超出了范围,但仍可计算
还没有评论,来说两句吧...