C语言之数组详解

简介: C语言之数组详解

2.1 数组的概念

数组是若干个相同类型的变量在内存中有序存储的集合。

int a[10];//定义了一个整型的数组 a,a 是数组的名字,数组中有 10 个元素,每个元素的类型 都是 int 类型,而且在内存中连续存储。

这十个元素分别是 a[0] a[1] …. a[9] a[0]~a[9]

在内存中连续的顺序存储

2.2 数组的分类

2.2.1 按元素的类型分类

(1)字符数组

即若干个字符变量的集合,数组中的每个元素都是字符型的变量

char s[10]; s[0],s[1]....s[9];

(2)短整型的数组

short int a[10]; a[0] ,a[9]; a[0]=4;a[9]=8;

(3)整型的数组

int a[10]; a[0] a[9]; a[0]=3;a[0]=6;

(4) 长整型的数组

lont int a[5];

(5)浮点型的数组(单、双)

float a[6]; a[4]=3.14f;

double a[8];

a[7]=3.115926;

(6)指针数组

char *a[10] int *a[10];

(7)结构体数组 struct stu boy[10];

2.2.2 按维数分类

一维数组

int a[30];

类似于一排平房

二维数组

int a[2] [30];

可以看成一栋楼房 有多层,每层有多个房间,也类似于数学中的矩阵 二维数组可以看成由多个一维数组构成的。 有行,有列,

多维数组 int a[4] [2] [10];

三维数组是由多个相同的二维数组构成的

int a[5] [4] [2] [10];

2.3 数组的定义

定义一个数组,在内存里分配空间

2.3.1 一维数组的定义

格式:

数据类型 数组名 [数组元素个数];

int a [10]; char b [5];

定义了 5 个 char 类型变量的数组 b

5 个变量分别为 b[0] ,b[1],b[2],b[3],b[4];

在数组定义的时候可以不给出数组元素的个数,根据初始化的个数来定数组的大小

例 1:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[]={1,2,3,4,5};
printf("%d\n",sizeof(a));
return 0;
}

2.3.2 二维数组的定义

格式: 数据类型 数组名 [行的个数] [列的个数];

int a [4] [5];

定义了 20 个 int 类型的变量 分别是

a[0] [0] ,a[0] [1],a[0] [2] ,a[0] [3] ,a[0] [4];

a[1] [0] ,a[1] [1],a[1] [2] ,a[1] [3] ,a[1] [4];

a[2] [0] ,a[2] [1],a[2] [2] ,a[2] [3] ,a[2] [4];

a[3] [0] ,a[3] [1],a[3] [2] ,a[3] [3] ,a[3] [4];

多维数组定义:

int a[3] [4] [5]

int a[8] [3] [4] [5];

扩展: 二维数组在定义的时候,可以不给出行数,但必须给出列数,二维数组的大小根据初始化的行数来定

例 2:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[][3]={
{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}
};
printf("%d\n",sizeof(a));
return 0;
}

2.4 数组的初始化

定义数组的时候,顺便给数组的元素赋初值,即开辟空间的同时并且给数组元素赋值

2.4.1 一维数组的初始化

a、全部初始化 int a[5]={2,4,7,8,5}; 代表的意思: a[0]=2; a[1]=4;a[2]=7;a[3] = 8;a[4]=5;

b、部分初始化 int a[5]={2,4,3};初始化赋值不够后面补 0 a[0] = 2; a[1]= 4;a[2]=3;a[3]=0;a[4]=0;

注意:只能省略后面元素,可以不初始化,不能中间的不初始化

例 3:
#include <stdio.h>
int main(int argc, char *argv[]
{
int a[5]={2,3,5};
int i;
for(i=0;i<5;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}

2.4.2 二维数组的定义并初始化

按行初始化:

a、全部初始化

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

a[0] [0] =1; a[0] [1] = 2;

a[1] [0] = 4,a[1] [1]=5;

b、部分初始化

int a[3] [3]={{1,2},{1}};

a[0] [0] = 1;a[0] [2] =0;

逐个初始化:

全部初始化: int a [2] [3]={2,5,4,2,3,4};

部分初始化: int a[2] [3]={3,5,6,8};

2.5 数组元素的引用方法

2.5.1 一维数组元素的引用方法

数组名 [下标];//下标代表数组元素在数组中的位置

int a[5]; a[0] a[1] a[2] a[3] a[4];

2.5.2 二维数组元素的引用方法

数组名[行下标] [列下标];

int a [4] [5];

a[0] [0] ,a[0] [1],a[0] [2] ,a[0] [3] ,a[0] [4];

a[1] [0] ,a[1] [1],a[1] [2] ,a[1] [3] ,a[1] [4];

a[2] [0] ,a[2] [1],a[2] [2] ,a[2] [3] ,a[2] [4];

a[3] [0] ,a[3] [1],a[3] [2] ,a[3] [3] ,a[3] [4];

例 4:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[3][4]={{1,2,3,4},{5,6},{5}};
int b[3][4]={11,12,13,14,15,16,17,18,19};
int i,j;
for(i=0;i<3;i++)//遍历所有行
{
for(j=0;j<4;j++)//遍历一行的所有列
{
printf("a[%d][%d]=%d ",i,j,a[i][j]);
}
printf("\n");
}
for(i=0;i<3;i++)//遍历所有行
{
for(j=0;j<4;j++)//遍历一行的所有列
{
printf("b[%d][%d]=%d ",i,j,b[i][j]);
}
printf("\n");
}
return 0;}

2.5.3 字符数组

char c1[] ={‘c’,’ ’,’p’,’r’,’o’,’g’};

char c2[] = “c prog”;

char a = { {‘B’,’A’,’S’,’I’,’C’}, {‘d’,’B’,’A’,’S’,’E’} };

char a = {“hello”,“world”};

字符数组的引用

1.用字符串方式赋值比用字符逐个赋值要多占 1 个字节,用于存放字符串结束标志‘\0’

2.上面的数组 c2 在内存中的实际存放情况为:

 

注:'\0'是由 C 编译系统自< /> 动加上的 3.由于采用了'\0'标志,字符数组的输入输出将 变得简单方便.

相关文章
|
2月前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
187 6
|
3月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
3月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
99 5
|
3月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
3月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
3月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
81 4
|
4月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
81 6
|
4月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
4月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
|
4月前
|
C语言
C语言数组
C语言数组
39 0

热门文章

最新文章