首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >浅浅理解C语言之数组大佬

浅浅理解C语言之数组大佬

作者头像
optimistic_chen
发布2026-01-14 19:51:45
发布2026-01-14 19:51:45
680
举报

一、数组概念

数组是一组相同类型元素的组合

1.相同类型:数组中的多个数据类型相同

2.集合:数组中存放1个或多个数据,元素个数不能为0

3.数组分为一维数组和多维数组(这里只介绍二维数组)

二、一维数组

1.创建和初始化

创建:

类型 数组名[常量值(数组大小)]; int arr [10];

初始化:a:不完全初始化(创建的数组规定了大小,也就是确定了数组中只能放的元素个数,但只给几个元素赋了值,没有管剩下的元素;

创建的数组没有规定大小,但系统会根据你输入的元素去开辟相应的空间大小)

b:完全初始化

代码语言:javascript
复制
//不完全初始化
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开始访问

代码语言:javascript
复制
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(只限于字符串数组!!!) 对于其他类型两者的值都一样。

代码语言:javascript
复制
#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.数组在内存中的储存(打印数组元素的地址)

代码语言:javascript
复制
#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.二维数组的下标

代码语言:javascript
复制
#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.二维数组在内存的储存

代码语言:javascript
复制
#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;
}

结论:二维数组在内存的空间布局上,也是线性连续且递增的!!! 二维数组本质上也是一维数组,只不过内部元素放的是一维数组。

四、最后

小白浅浅复习一下数组,如有错误,求评论或私信指正。

求赞!!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、数组概念
  • 二、一维数组
    • 1.创建和初始化
    • 2.数组的类型
    • 3.数组的使用技巧
  • 4.数组在内存中的储存(打印数组元素的地址)
  • 三、二维数组
    • 1.创建
    • 2.初始化
      • a.完全初始化
      • b.不完全初始化
    • 3.二维数组的下标
    • 4.二维数组在内存的储存
  • 四、最后
  • 求赞!!!!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档