目录
前言,和小编一起感受数组的魅力!!!
1.数组的概念
数组是一种用于存储相同类型数据元素的数据结构。它是C语言中的一种重要数据类型。数组可以包含多个元素,并通过索引(下标)来访问和操作这些元素。
从概念中发现:
补充了解:
在C语言中,标准并没有明确禁止定义大小为0的数组,但实际行为取决于具体的编译器和实现。在某些编译器中,定义大小为0的数组可能会导致编译错误或未定义行为。在标准C(C99及之后的标准)中,声明大小为0的数组并不是合法的。
然而,在某些情况下,特别是结构体中的灵活数组成员(flexible array member),可以使用一种类似于0大小数组的结构。
数组分为一维数组和多维数组,常见的多维数组是二维数组。
2.一维数组的创建和初始化
2.1数组创建
在C语言中,数组的声明由元素类型和数组名组成,可以指定数组的大小(元素个数)。以下是数组声明的一般形式:
type arrayName[size];
其中:
type
表示数组中元素的数据类型,可以是基本数据类型(如整数、浮点数、字符等)或自定义类型(如结构体)。arrayName
是数组的名称,用于在程序中引用数组。size
表示数组的大小,即数组中元素的个数。
int math[20];
char ch[8];
double score[10];
2.2数组的初始化
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多,超过了数组大小
int arr3[3] = {1, 2, 3, 4};
2.3数组的类型
int arr1[10];int arr2[12];char ch[5];arr1数组的类型是 int [10]arr2数组的类型是 int[12]ch 数组的类型是 char [5]
3.一维数组的使用
3.1数组下标
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
![a7f21dbdbf6149d58a23db5f96d95ee1.png](https://img-blog.csdnimg.cn/direct/a7f21dbdbf6149d58a23db5f96d95ee1.png)
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n", arr[7]);//8
printf("%d\n", arr[3]);//4
return 0;
}
3.2数组元素的输入输出
输入和输出数组的元素,可以使用循环结构来遍历数组。
让数组下标显示出来再进行索引。
#include <stdio.h>
int main() {
int numbers[5];
// 输入数组元素
printf("Enter 5 numbers:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &numbers[i]);
}
// 输出数组元素
printf("The numbers are:\n");
for (int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
首先声明了一个包含5个整数的数组
numbers
。然后,使用循环结构来输入数组元素。在每次循环中,通过scanf
函数将输入的值存储到数组的相应位置。接下来,使用循环结构输出数组的元素。在每次循环中,使用printf
函数打印输出数组元素。请注意,在输入和输出数组元素时,循环的控制变量i
表示数组的索引,从0递增到4,对应数组的五个元素。
小结:
一维数组的使用包括数组的声明和初始化、通过索引访问和操作数组元素,以及使用循环结构输入和输出数组元素。这些基本操作可以让您更灵活地处理一组相关的数据。
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个字节)。所以我们得出结论:数组在内存中是连续存放的。
5.sizeof的使用,计算数组个数
sizeof 中C语言是一个关键字,是可以计算类型或者变量大小的,其实 sizeof 也可以计算数组的大小。
#include <stido.h>
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr));
return 0;
}
#include <stido.h>
int main()
{
int arr[10] = {0};
int sz = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", sz);
return 0;
}
结果:10
小编提醒:
6.步入二维数组
6.1.二维数组的概念
二维数组是C语言中的一种特殊数据类型,用于存储具有两个维度的数据。它可以看作是一个由行和列组成的表格或矩阵,其中每个元素都可以通过行索引和列索引来访问和操作。
6.2二维数组的声明和初始化
dataType arrayName[rowSize][columnSize];
dataType
表示数组中元素的数据类型,可以是整数、浮点数、字符或其他自定义类型。arrayName
是数组的名称,用于在程序中引用数组。rowSize
表示数组的行数,即矩阵的行数。columnSize
表示数组的列数,即矩阵的列数。
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
这声明了一个名为 arr
的二维整数数组,它有3行和5列,总共可以存储3x5=15个整数,并进行了初始化。
二维数组的元素可以通过行索引和列索引来访问。行索引和列索引都从0开始计数,依次递增。例如,要访问二维数组 arr
的第2行第3列的元素,可以使用以下方式:
arr[1][2] = 10; // 将第2行第3列的元素赋值为10
int x = arr[0][3]; // 将第1行第4列的元素的值赋给变量x
printf("%d",arr[2][4]);//打印第2行第4列的元素的值
6.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};
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;
}
6.4二维数组在内存中的存储
#include <stdio.h>
int main()
{
int arr[3][5] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
输出结果:
![27342c23b9a6403fa1527e02b207b144.png](https://img-blog.csdnimg.cn/direct/27342c23b9a6403fa1527e02b207b144.png)
7.C99中的变长数组(补充)
int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};
int n = a+b;int arr[n];
在C语言中,变长数组(Variable Length Arrays,简称VLA)是一种特殊的数组类型,它允许数组的大小在运行时动态确定。这一特性在C99标准中引入,使得程序可以更灵活地处理数组大小不确定的情况。
声明变长数组
变长数组的声明与普通数组相似,但它的大小不是一个常量表达式,而是一个变量或表达式的结果。以下是一个变长数组的声明示例:
#include <stdio.h>
int main() {
int n;
printf("Enter the size of the array: ");
scanf("%d", &n); // 读取数组大小
int arr[n]; // 声明变长数组
// 输入数组元素
printf("Enter %d elements:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 输出数组元素
printf("The elements are:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
在这个示例中,数组 arr
的大小由变量 n
的值决定。用户输入数组大小 n
后,程序动态创建一个大小为 n
的数组,并读取和输出 n
个元素。
特点和注意事项
-
作用域和生命周期:
变长数组的作用域和生命周期与其所在的块作用域相同。它在声明的块作用域内有效,块作用域结束时变长数组也随之销毁。 -
运行时确定大小:
变长数组的大小在运行时确定,使得程序可以处理大小不确定的数据结构。 -
不支持全局或静态变长数组:
变长数组不能声明为全局变量或静态变量,只能在函数内使用。 -
内存分配:
变长数组的内存分配在栈上,因此不能使用太大的数组以防止栈溢出。
结束语
本节内容到此结束,内容有点多,感谢友友们到看到最后。
支持小编的点个赞,留个评论吧!!!