首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言】--关于数组的一系列问题,看这篇就够了

【C语言】--关于数组的一系列问题,看这篇就够了

作者头像
User_芊芊君子
发布2025-04-08 20:41:02
发布2025-04-08 20:41:02
2950
举报

前言:

在C语言中,数组是一种极为重要的数据结构,它为储存和处理多个相同类型的数据元素提供了便携而高效的方式。无论是处理简单的数值序列还是复杂的数据集合,数组都扮演着不可或缺的角色。下面,就跟博主一起来看看数组的一系列问题吧!

1.数组是什么?

数组是由相同类型的元素组成的有序集合,这些元素在内存中连续储存。可以将数组想象成一排盒子,一个盒子中存放一个元素,每个盒子下面都有一个标号,不过是从0开始,这些标号称为下标。 注:

1.数组中存放的元素不能为0; 2.数组中存放的元素类型是相同的 3.数组分为一维数组和多维数组,多维数组常见的一般为二维数组

2.一维数组

2.1 一维数组的创建和初始化

(1)数组的创建

语法如下:

代码语言:javascript
复制
type arr_name[常量];

1.type 指的是数组元素的类型,eg: int , float , char , short… 2.arr_name 指数组的名字 3.[ ]中放的是一个常量值,表达数组的大小

实例如下:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int  arr1[5];
	float arr2[10];
	char  arr3[10];
	double arr4[10];
	return 0;
}
(2)数组的初始化

数组在创建时,我们需要给定初始值,称为初始化

数组的类型:去掉数组名,剩下的就是数组的类型

2.2 一维数组的使用

(1)数组的下标

博主在刚开始就提到了数组的下标,在这里用图片表达,方便大家理解

[ ] : 下标引用符 ,访问下标为6的元素,如图:

(2)数组的输入和打印
代码语言:javascript
复制
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

执行结果:

2.3 一维数组在内存中的储存

打印数组元素的地址:

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

2.二维数组

只要将一维数组作为一堆数组的元素,就得到了二维数组,同理:将二维数组作为数组元素时,就得到了三维数组

2.1 二维数组的创建和初始化

(1)二维数组的创建

语法如下:

代码语言:javascript
复制
type arr_name[常量1][常量2];
eg:int arr[3][5];
//3:表示3行
//5:表示一行有5个元素
(2)二维数组的初始化
代码语言:javascript
复制
int main()
{
	int arr1[3][5] = { 1,2, };//不完全初始化
	int arr2[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };//完全初始化
    int  arr3[3][5] = {{1,2},{3,4},{5,6}};
	return 0;
}

初始化时可以省略行,但不能省略列

代码语言:javascript
复制
int arr[][5]

2.2 二维数组的使用

二维数组的使用也是通过下标,用双重循环进行嵌套

代码语言:javascript
复制
int main()
{
	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
	int i = 0;
	for (i = 0; i < 3; i++)//行号
	{
		int j = 0;
		for (j = 0; j < 5; j++)//列号
		{
			scanf("%d", &arr[i][j]);
		}
	}
	for (i = 0; i < 3; i++)//行号
	{
		int j = 0;
		for (j = 0; j < 5; j++)//列号
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

2.3 二维数组的在内存中的储存

和一维数组一样,打印出二维数组的每个元素的地址

代码语言:javascript
复制
int main()
{
	int arr[3][5] = { 0 };
	int i = 0;
	
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
}

同样,地址之间相差4个字节,并且每个元素连续存放

3.变长数组

语法如下:

代码语言:javascript
复制
int n = a+b;
int arr[n]

arr 为变长数组,它的长度由n决定,只有运行时才知道n是多少,即:数组的长度也只有运行时才能知道,所以变长数组不能初始化,变长数组不是说数组的大小可以改变,而是数组的大小可以根据变量来指定。(但是变长数组在vs2022无法使用,可以在gcc编译器上使用)

或者是在vs2022中安装clang编译组件

给n 中输入10,然后在输入十个数字,并输出:

代码语言:javascript
复制
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[n];
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

4.练习

(1)多个字符从两端移动,向中间汇聚
代码语言:javascript
复制
int main()
{
	char arr1[] = "welcome to bit...";
	char arr2[] = "*****************";
	int left = 0;
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);
		system("cls");
		left++;
		right--;
	}
	printf("%s\n", arr2);
	return 0;
}
(2)二分查找
代码语言:javascript
复制
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	int n = 7;//要找的数字
	int mid = 0;
	int find = 0;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > n)
		{
			right = mid - 1;
		}
		else if (arr[mid] < n)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是%d\n", mid);
			find = 1;
			break;
		}
	}
	if (find == 0)
	{
		printf("找不到了\n");
	}
	return 0;

}

总结:

C 语言数组是编程中的重要工具,熟练掌握数组的概念、声明、初始化、访问、遍历以及应用场景和注意事项,能够帮助我们更加高效地编写 C 语言程序,解决各种复杂的编程问题。通过不断的实践和深入学习,能够更好地发挥数组在数据处理和算法实现中的强大作用。看到这里别忘了给个三连,支持一下博主哦!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.数组是什么?
  • 2.一维数组
    • 2.1 一维数组的创建和初始化
    • 2.2 一维数组的使用
    • 2.3 一维数组在内存中的储存
  • 2.二维数组
    • 2.1 二维数组的创建和初始化
    • 2.2 二维数组的使用
    • 2.3 二维数组的在内存中的储存
  • 3.变长数组
  • 4.练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档