前言:
在C语言中,数组是一种极为重要的数据结构,它为储存和处理多个相同类型的数据元素提供了便携而高效的方式。无论是处理简单的数值序列还是复杂的数据集合,数组都扮演着不可或缺的角色。下面,就跟博主一起来看看数组的一系列问题吧!
文章目录:
1.数组是什么?
数组是由相同类型的元素组成的有序集合,这些元素在内存中连续储存。可以将数组想象成一排盒子,一个盒子中存放一个元素,每个盒子下面都有一个标号,不过是从0开始,这些标号称为下标。
注:
1.数组中存放的元素不能为0;
2.数组中存放的元素类型是相同的
3.数组分为一维数组和多维数组,多维数组常见的一般为二维数组
2.一维数组
2.1 一维数组的创建和初始化
(1)数组的创建
语法如下:
type arr_name[常量];
1.type 指的是数组元素的类型,eg: int , float , char , short…
2.arr_name 指数组的名字
3.[ ]中放的是一个常量值,表达数组的大小
实例如下:
#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)数组的输入和打印
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 一维数组在内存中的储存
打印数组元素的地址:
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)二维数组的创建
语法如下:
type arr_name[常量1][常量2];
eg:int arr[3][5];
//3:表示3行
//5:表示一行有5个元素
(2)二维数组的初始化
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;
}
初始化时可以省略行,但不能省略列
int arr[][5]
2.2 二维数组的使用
二维数组的使用也是通过下标,用双重循环进行嵌套
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 二维数组的在内存中的储存
和一维数组一样,打印出二维数组的每个元素的地址
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.变长数组
语法如下:
int n = a+b;
int arr[n]
arr 为变长数组,它的长度由n决定,只有运行时才知道n是多少,即:数组的长度也只有运行时才能知道,所以变长数组不能初始化,变长数组不是说数组的大小可以改变,而是数组的大小可以根据变量来指定。(但是变长数组在vs2022无法使用,可以在gcc编译器上使用)
或者是在vs2022中安装clang编译组件
给n 中输入10,然后在输入十个数字,并输出:
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)多个字符从两端移动,向中间汇聚
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)二分查找
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;
}
总结:
标签:初始化,arr,--,++,这篇,C语言,int,二维,数组 From: https://blog.csdn.net/user340/article/details/144299717C 语言数组是编程中的重要工具,熟练掌握数组的概念、声明、初始化、访问、遍历以及应用场景和注意事项,能够帮助我们更加高效地编写 C 语言程序,解决各种复杂的编程问题。通过不断的实践和深入学习,能够更好地发挥数组在数据处理和算法实现中的强大作用。看到这里别忘了给个三连,支持一下博主哦!