C语言数组

目录

1.数组的概念

2.数组创建

 3.数组元素初始化

 4.数组元素的类型

5.一维数组的使用

(1).数组下标

 (2).数组元素的打印

 (3).数组元素的输入

6.sizeof 单目操作符

7.数组在内存中的存储

8.二维数组的创建

(1).二维数组的概念

(2).二维数组的创建

 (3).二维数组初始化

      1>.不完全初始化

2>.完全初始化

(4).二维数组的使用

 (5).二维数组在内存中的存储


1.数组的概念

       数组中存放的是一个或者多个数据,但是数组元素个数不能为0。

       数组中存放的多个数据,类型是相同的。

2.数组创建

       在栈中直接开创一个数组空间,例如:

86d279e312744d87a58e482d66ee4d41.png

 3.数组元素初始化

b2b12411018d49b1b1f086c810fcbdb7.png

 4.数组元素的类型

例如:int arr[5]={0};

数组arr中的五个元素全部都是int类型.

int arr[5] = { 0 };

printf("%zd\n", sizeof(arr));

printf("%zd\n", sizeof(int[5]));

return 0;

8c7fdcd045c24af5956628a8a25f5908.png

        由上述可知,int类型的五个元素占20个字节,arr数组也占20个字节,由此可知,arr中的5个元素均为int类型。

5.一维数组的使用

(1).数组下标

例如:arr[5]={1,2,3,4,5};

arr数组在内存中开辟了五个字节的空间,他们分别存储着1,2,3,4,5这5个元素,在使用时,用数组名[下标]来代表它们的元素,注意下标,从0开始,例如:arr[0]=1,arr[1]=2,….

df004881b18d4016a4549343215003bd.png

 (2).数组元素的打印

数组元素在打印时是使用循环一个一个打印.

例如: 

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

 for (int i = 0; i < 5; i++)

 {

        printf("%d ", arr[i]);

 }

c8e57ddc1bbd4fbea5fc173fc8f16237.png

 (3).数组元素的输入

数组元素在输入过程中也是一个接一个进行输入的

例如:

 int arr[5] = { 0 };

 for (int j = 0; j < 5; j++)

 {

        scanf("%d", &arr[j]);

 }

 for (int i = 0; i < 5; i++)

 {

         printf("%d ", arr[i]);

 }

d4e7c5af2f67469081027ecfc100238d.png

6.sizeof 单目操作符

sizeof计算的是元素所占字节的大小

例如:

int a=4;

int ret=sizeof(a);//4    由于a为整型,而int类型占4个字节,因此,输出结果为4。

int arr[5]={0};

int rat=sizeof(arr);//20      计算的是数组的总大小,单位是字节。

int rdt=sizeof(arr)/sizeof(arr[0]);//5      计算的是数组中元素的个数。

7.数组在内存中的存储

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

 for (int i = 0; i < 5; i++)

 {

         printf("&arr[%d] = %p\n", i, &arr[i]);

 }

9b3a396527194eed82e782a124c1ed52.png

由图可知,它的每一个地址之间都相差了四个字节,也就是一个整型的位置 ,由此,我们可以推断,数组在内存中是连续存储的。

8.二维数组的创建

(1).二维数组的概念

       将一维数组作为数组的元素,这个时候组成的新的数组就为二维数组。

(2).二维数组的创建

在栈中直接开创一个二维数组,

type arr_name[常数值1][常数值2];

例如:

int arr[2][3];//创建一个2行3列的二维数组.

如下图所示:

9df03159a12e401fad7d06401aa33869.png

 (3).二维数组初始化

      1>.不完全初始化

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

caab6011c5284cf892d2f31541c7c932.png

 如上图所示,二维数组arr中初始化,前四个元素先放满第一行,第一行放满了,再接着放第二行,其余默认元素为零。

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

c35fc04486f14e9db2239f4ac4fc1d51.png

 因为二维数组本质上是由多个一维数组组成的,所以将一维数组作为元素放入其中,也可以做到对其部分元素进行初始化。

2>.完全初始化

int arr[2][3] = { 1,2,3,4,5,6 };

39c1db248d3b4c388dfc87aa8b0c34bd.png

如图所示,arr数组中存放六个元素分别为1,2,3,4,5,6这六个元素 。

int arr[2][3] = { { 1,2,3 },{ 4,5,6 } };

4df1c02848654133a0a49b4c577ef41d.png

 arr数组,是一个两行三列的数组,也就是相当于把两个长度为三的一维数组组合起来形了一个二维数组。

(4).二维数组的使用

二维数组的使用和一维数组一样,都是根据数组的下标来完成使用的。

int arr[3][5] = { { 1,2,3,4,5 },{ 2,3,4,5,6 },{ 3,4,5,6,7 } };
 printf("%d\n", arr[1][2]);//4

 printf("%d\n", arr[0][4]);//5

 printf("%d\n", arr[1][3]);//5

 printf("%d\n", arr[2][2]);//5

 printf("%d\n", arr[2][0]);//3

aad3108b45364361b0d7033711a4c52d.png

例如,将二维数组中的所有元素全部输出:

 int arr[3][5] = { { 1,2,3,4,5 },{ 2,3,4,5,6 },{ 3,4,5,6,7 } };

 for (int i = 0; i < 3; i++)

 {

  for (int j = 0; j < 5; j++)

  {

   printf("%d ", arr[i][j]);

  }

  printf("\n");

 }

43c9fb43e40a4787bf68d3a11fa82be8.png

 (5).二维数组在内存中的存储

int arr[3][5] = { { 1,2,3,4,5 },{ 2,3,4,5,6 },{ 3,4,5,6,7 } };

 for (int i = 0; i < 3; i++)

 {

  for (int j = 0; j < 5; j++)

  {

   printf("arr[%d][%d] == %p\n", i, j, &arr[i][j]);

  }

 }

e1e723fd1ed54f9ba41f9a9047cd6523.png

由上图可知,前五个元素位于第一行,中间五个元素位于第二行,最后五个元素位于第三行,它们的地址每个之间都相差了四个字节,也就是一个整形的位置,由此可以断定它们在内存中是连续存放的。 

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值