C语言数组

一、数组的概念

用来存储一组数据的构造数据类型

特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。

二、数组的定义

格式: 类型 数组名[元素个数];

举例:存储5个人的年龄

int ages[5]; // 在内存中开辟4x5=20个字节的存储空间

可以在定义数组的同时对数组进行初始化:

Int ages[5] = {17, 18, 19, 20, 21};

遍历数组:

for (int i=0; i<5; i++)

{

  printf("ages[%d]=%d\n", i, ages[i]);

}

注意:

(1)数组的初始化

①. int ages[5] = {17, 18, 19, 20, 21};//一般写法

②. int ages[5] = {17, 18};//只对前两个元素赋值

③. int ages[5] = {[3]=10, [4]=11};// 对指定的元素赋值,这里为第三个和第四个

④. int ages[] = {11, 12, 13}.// 正确,右边的元素确定,则个数可以省略这里为3个。

⑤. int ages[]; // 错误,编译器无法知道应该分配多少的存储空间

⑥. int ages[5]; ages={17,18,19,20,21}; // 错误,只能在定义数组时这样进行初始化

⑦. int ages[‘A‘] = {1, 2, 3}; // 正确,相当于是ages[65]

⑧. int count = 5; int ages[count]; // 如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间,ages[0]=1;ages[1]=2;可以像这样对数组的元素进行赋值,但是2,3,4等元素的值时不确定的。

⑨. 而int count = 5; int ages[count] = {1, 2, 3, 4, 5}; // 这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为常量或者不写,不能是一个变量

(2)计算数组元素

当没有表明数组元素个数时,如何对其进行遍历(要求使用数组元素个数)?

可以使用sizeof运算符来计算数组元素的个数

int count = sizeof(ages) / sizeof(int); // 数组的总长度除以单个的长度等于元素个数

三、数组内存存储细节

假设有数组如下:

int x[] = {1, 2};

char ca[5]={‘a‘, ‘A‘, ‘B‘, ‘C‘, ‘D‘};

数组名即代表数组的地址,数组的地址 == 数组名(ca)== 数组的首元素的地址&ca[0]

在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列存储,整个数组的地址为首元素的地址。

模拟该数组的内存存储细节如下:

注意:字符在内存中是以对应ASCII值的二进制形式存储的,而非上表的形式。

在这个例子中,数组x的地址为它的首元素的地址0x08,数组ca的地址为0x03。

四、数组-传址调用

void change(int array[])  // 数组可以作为函数的形参,可以省略数组元素的个数

{

  array[0] = 100;

}

void change2(int a)  // 基本类型作为函数的形参

{

  a = 200;

}

int main()

{

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

  change2(ages[0]);

  change(ages);

  return 0;

}

Array数组与ages数组的地址一致,若以数组作为函数的参数,这种传递方式是传址调用,传递的是整个数组的地址,修改形参数组元素的值,就是修改实参的值。

当你把一个数组当做参数来传递时,它会看做是一个指针,在该函数体内使用sizeof运算符来计算数组的长度,得出的数值永远为8,而非数组的实际长度,因为任何类型的指针都占8个字节的存储空间。

提示:数组作为一个函数的参数时,如果函数体涉及到数组遍历等操作,通常把数组的实际元素个数也作为参数传递给函数。

如 void maxofarray(int array[],sizeof(ages)/sizeof(int)){....}

五、二维数组

int ages[50]; // 数组能够存放50个int类型的数据

int ages1[3][10]; // 数组能够存放3个数组,每个数组存放10个数值,共3x10=30个述职数值。

一个二维数组a,a包括两个一维数组a[0]和a[1],每个一维数组都包括三个元素。

使用场合:五子棋,俄罗斯方块等,

假设:

char Y[3][2]={

{‘A‘, ‘B‘},

{‘C‘, ‘D‘},

{‘E‘, ‘F‘},

};

内存情况:

时间: 2024-11-04 17:52:03

C语言数组的相关文章

1.2 C语言---数组

1.2     C语言---数组 1.2.1    为什么引入数组? 数组就是数组成的一个组,数就是一个特定数据类型的变量,组就是说好多数放在了一起. 1.2.2    怎么定义数组? int a[4];     //定义了一个数组a,里面有4个int元素. 总结:数组中的所有元素必须是同一种数据类型,不可能在一个数组中存储两种数据类型的数. 1.2.3    怎么使用数组? 数组定义的时候作为整体进行定义.但是使用的时候不能作为整体来使用,使用时必须拆开使用数组中的 各个元素. 例如:int

Go语言数组的使用

Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展. 数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推. 声明数组

Go语言数组,切片

数组声明 Go 语言数组声明需要指定元素类型及元素个数,语法格式如下: var variable_name [SIZE] variable_type 以上为一维数组的定义方式.数组长度必须是整数且大于 0.例如以下定义了数组 balance 长度为 10 类型为 float32: var balance [10] float32 初始化数组 以下演示了数组初始化: var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 初始化数组中 {} 中的

C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include <stdlib.h> int main() { int a1=20, a2=345, a3=700, a4=22; int b1=56720, b2=9999, b3=20098, b4=2; int c1=233, c2=205, c3=1, c4=6666; int d1=34, d2=0, d3

车牌识别--模板库C语言数组的制作

在车牌识别中,字符模板匹配的模板库是很大的. 包括 10个阿拉伯数字以及26个英文字母还有几十个汉字,每个库都是一张小图片,加载起来也比较繁琐. 后面还有可能为提高识别增加额外的模板库. 之前的处理中,是把这些库的图片文件放到一个文件夹中,程序启动后,再一个一个读取,这样文件的数量就比较多. 原图片模板如下: 程序稳定后,我们就不要这些字符模板库了,可以用数组的形式代替,就是把这些文件数据保存一个c语言数组里面,直接编译到程序中,运行程序的时候直接使用,不用一个一个加载,再去匹配. 目前使用的m

C语言数组元素下标为何从0开始

很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个.的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从1开始的.难道是C语言故意要与众不同?要弄清楚这个问题,得先看一下计算机底层是怎样处理数组元素的.我们先编写了一个小程序,然后在visual studio中对其进行了反汇编.源程序和反汇编后的部分代码如下: 源程序: int arr[5];  //一个全局数组 int main() { int i;

R类型4R 语言数组

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px ".PingFang SC"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helv

GO语言学习(十四)Go 语言数组

Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展. 数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推. 声明数组

c语言 数组类型

数组类型重命名数组类型由元素类型和数组大小共同决定数组指针是一个指针,只想对应类型的数组指针数组是一个数组,其中每个元素都是指针数组指针遵循指针运算法则指针数组拥有c语言数组的各种特性 c通过typedef 为数组类型重命名格式为 typedef type(name)[size] 数组类型:typedef int(aint5)[5] typedef float(afloat10)[10] 数组定义:aint5 iarray; //定义了一个数组afloat10 farray; //定义了一个数组

C语言数组寻址

C语言数组 数组的定义 数组是用来存放数据类型相同且逻辑意义相同的数据 数组的大小 数组的大小不能是变量,必须是常量或者常量表达式,常量表达式由编译器编译时自动求值. 也可以不指定数组大小,但必须对数组进行初始化,编译器在编译时会根据初始化列表中元 素的个数计算数组大小,例如: int nAry[]={1,3,4}; 数组的初始化 在定义数组时可以使用初始化列表进行初始化,例如: int nAry[3]={0,3,3}; 但是只能在定义时使用这种方式赋值,在其他地方只能进行单个元素赋值. 如果数