目录
由输出结果可知,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻的元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的
编辑结论:二维数组在内存的空间布局上,也是线性连续且递增的!!! 二维数组本质上也是一维数组,只不过内部元素放的是一维数组。
一、数组概念
数组是一组相同类型元素的组合
1.相同类型:数组中的多个数据类型相同
2.集合:数组中存放1个或多个数据,元素个数不能为0
3.数组分为一维数组和多维数组(这里只介绍二维数组)
二、一维数组
1.创建和初始化
创建:
类型 数组名[常量值(数组大小)];
int arr [10];
初始化:a:不完全初始化(创建的数组规定了大小,也就是确定了数组中只能放的元素个数,但只给几个元素赋了值,没有管剩下的元素;
创建的数组没有规定大小,但系统会根据你输入的元素去开辟相应的空间大小)
b:完全初始化
//不完全初始化
int arr[10]={1,2,3};
char arr[5]={'a','b'};
int arr[]={0};
char arr[4]="abcd";
//完全初始化
int arr[10]={1,2,3,4,5,6,7,8,9,10};
char arr[5]={'a','b','c','d','e'};
2.数组的类型
数组算是一种自定义类型,去掉数组名就是数组类型。
3.数组的使用技巧
首先由以上知识可知如何定义一个数组,那么在敲代码过程中,我们灵活应用数组技巧,可以使代码更加简练,其中理解数组的下标,计算数组大小等等就是十分有趣的知识点。
数组下标:数组是使用下标来访问的,下标是从0开始访问
int main(){
int arr[5]={1,2,3,4,5};
printf("%d",arr[0]);//打印数组第一个元素
return 0;
}
数组大小:计算数组大小需要sizeof,strlen(需要引用头文件)函数
两者除计算字符串大小时有区别之外,其余情况都一样。
区别:sizeof计算字符串函数时,会多计算一个字符'\0','\0'是字符串的结束标准,每一个字符串都会有,只是不显示出来。
strlen只会计算'\0'之前的字符串的字符个数,strlen遇到'\0'才会停止计算,否则会一直找下去,直到遇上'\0'字符,从而产生随机值。
总结:sizeof的值永远要比strlen计算的值多1(只限于字符串数组!!!) 对于其他类型两者的值都一样。
#include<stdio.h>
#include<stdring>
int main()
{
char arr="abcdef";
printf("%d\n",sizeof(arr));
printf(%d\n",strlen(arr));
return 0;
}
sizeof()操作符用于取长度,以字节为单位。sizeof(数组名)即求的是整个数组的大小sizeof(首元素)即求数组单个元素大小arr[0]。
数组的大小=sizeof(arr)/sizeof(arr[0])
4.数组在内存中的储存(打印数组元素的地址)
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
printf("&arr[%d] = %p\n ", i, &arr[i]);
}
return 0;
}
由输出结果可知,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻的
元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的
三、二维数组
1.创建
数组类型 数组[常量值][常量值]
int arr [3] [5];
[3]:表示数组有三行
[5]:表示每一行有5个元素
2.初始化
a.完全初始化
int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
b.不完全初始化
int arr[3][5]={1,2,3};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};
未初始化的部分默认为0。
3.二维数组的下标
#include <stdio.h>
int main()
{
int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
printf("%d\n", arr[2][4]);
return 0;
}
4.二维数组在内存的储存
#include <stdio.h>
int main()
{
int arr[3][4];
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
结论:二维数组在内存的空间布局上,也是线性连续且递增的!!!
二维数组本质上也是一维数组,只不过内部元素放的是一维数组。
四、最后
小白浅浅复习一下数组,如有错误,求评论或私信指正。
请看官欣赏上次博客:http://t.csdnimg.cn/ObfEE