c语⾔数组太⼤⽆法得出结果_C语⾔必学知识点详解【C语⾔-
数组】!
为了让⼤家更好地学习和理解数组,我们先来认识⼀下内存中的"地址"
"地址"。
地址
1.计算机中的内存是以字节为单位的存储空间。
内存的每⼀个字节都有⼀个唯⼀的编号,这个编号就称为地址。凡存放在内存中的程序和数据都有⼀个地址,也就是说,⼀个函数也有⾃⼰的内存地址。
2.当定义⼀个变量时,系统就分配⼀个带有唯⼀地址的存储单元来存储这个变量。⽐如:
2.当定义⼀个变量时,系统就分配⼀个带有唯⼀地址的存储单元来存储这个变量。
chara ='A'; // A的ASCII值为65
intb =66;
第⼀个字节的地址就是该变量的地址。
在16bit编译器环境下,系统为a、b分别分配1个字节、2个字节的存储单元。变量存储单元的第⼀个字节的地址就是该变量的地址。
可以看出,变量a的地址是ffc3;变量b的地址是ffc1。内存中存储的都是2进制数据。
3.在调试过程中,我们采取打印的⽅式查看变量的地址:
输出结果:
⼀、⼀维数组
1.⼀维数组的定义
类型 数组名[元素个数]
▷定义的形式为:类型 数组名[元素个数]
inta[5];
▷只能放在数组名的后⾯,下⾯的都是错误写法:
int[5] a; // 错误
int b; // 错误
变量或者变量表达式来表⽰元素
常量(⽐如6、8)、常量表达式
常量表达式(⽐如3+4、5*7)。绝对不能使⽤变量或者变量表达式
▷⾥⾯的个数必须是⼀个固定值
固定值,可以是常量
个数,⼤多数情况下不要省略元素个数(当数组作为函数的形参和数组初始化时除外)
正确写法:
下⾯的都是正确写法:
inta[5];// 整型常量
intb['A'];// 字符常量,其实就是65
intc[3*4];// 整型常量表达式
错误写法:
下⾯的都是错误写法:
inta; // 没有指定元素个数,错误
inti =9;
inta[i]; // ⽤变量做元素个数,错误
2.⼀维数组的存储
定义数组时,系统将按照数组类型和个数分配⼀段连续的存储空间来存储数组元素,如int a[3]占据了连续的6字节存储空间(在16位编译
数组名代表着整个数组的地址,也就是数组的起始地址。
起始地址。
器环境下,⼀个int类型占⽤2个字节)。要注意的是,数组名
注意:其实a不算是变量,是个常量,它代表着数组的地址。上图把a放到变量⼀栏是为了⽅便⼤家理解数组结构。
注意:其实a不算是变量,是个常量,它代表着数组的地址。
第⼀个元素的地址就是整个数数组a的地址是ffc1,a[0]的地址是ffc1,a[1]的地址是ffc3,a[2]的地址是ffc5。因此a == &a[0],即第⼀个元素的地址就是整个数组的地址
3.⼀维数组的初始化
▶ 初始化的⼀般形式是:类型 数组名[元素个数] = {元素1, 元素2, ...};
inta[2] = {8,10};
其实相当于:
inta[2];
a[0] =8;
a[1] =10;
编译器是不会对数组下标越界进⾏检查的,所以⾃⼰访问数组元素时要⼩⼼
注意的是:C语⾔中编译器是不会对数组下标越界进⾏检查的
▶ 元素值列表可以是数组所有元素的初值,也可以是前⾯部分元素的初值
inta[4] = {2,5};
当数组为整型时,初始化未确定初值的元素,默认为0,所以上⾯的a[2]、a[3]都为0
▶ 当对全部数组元素都赋初值时,可以省略元素个数
inta = {2,5,7};
说明数组a的元素个数是3
▶ 数组初始化时的赋值⽅式只能⽤于数组的定义,定义之后只能⼀个元素⼀个元素地赋值
错误的:
下⾯的写法是错误
inta[3];
a[3] = {1,2,3}; // 错误
a = {1,2,3}; // 错误
其实为什么是错误的写法呢?我们可以简要分析⼀下。
1> 第2⾏的a[3]代表着访问数组的第4个元素,⾸先这⾥已经是数组下标越界了;就算没有越界,给a[3]赋值时也应该赋⼀个int类型的整1>
数,不应该是{}。
它是个常量!给常量赋值,那肯定错了!
2> 第3⾏的a是数组名,代表着数组的地址,它是个常量
2>
4.⼀维数组与函数参数
⼀维数组的元素作为函数实参,与同类型的简单变量作为实参⼀样,是单向的值传递,即数组元素的值传给形参,形参的改变不影响实▶ ⼀维数组的元素
输出结果:
⼀维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全等▶ ⼤家都知道,数组名代表着整个数组的地址,如果⼀维数组的名字
形参数组的元素个数可以省略。
同,是存放在同⼀存储空间的同⼀个数组。这样形参数组修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。
输出结果:
⼆、⼆维数组
1.⼆维数组的定义
类型 数组名[⾏数][列数]
定义形式:类型 数组名[⾏数][列数]
inta[2][3]; // 共2⾏3列,6个元素
2.⼆维数组的存储
▶ C语⾔把⼆维数组当作是⼀维数组的集合,即⼆维数组是⼀个特殊的⼀维数组:它的元素是⼀维数组。
⼆维数组是⼀个特殊的⼀维数组:它的元素是⼀维数组。例如int a[2][3]可以看作由⼀维数组a[0]和⼀维数组a[1]组成,这两个⼀维数组都包含了3个int类型的元素
▶ ⼆维数组的存放顺序是按⾏存放的,先存放第⼀⾏的元素,再存放第2⾏的元素。例如int a[2][3]的
存放顺序是:
a[0][0] → a[0][1] → a[0][2] → a[1][0] → a[1][1] → a[1][2]
▶ 再来看看在内存中的存储情况,例如int a[2][2]
注意:a[0]、a[1]也是数组,是⼀维数组,⽽且a[0]、a[1]就是数组名,因此a[0]、a[1]就代表着这个⼀维数组的地址
注意:
1> 数组a的地址是ffc1,数组a[0]的地址也是ffc1,即a = a[0];
1>
2>数组全部赋值为1
2> 元素a[0][0]的地址是ffc1,所以数组a[0]的地址和元素a[0][0]的地址相同,即a[0] = &a[0][0];
3> 最终可以得出结论:a = a[0] = &a[0][0],以此类推,可以得出a[1] = &a[1][0]
3>
3.⼆维数组的初始化
▶ 按⾏进⾏初始化
inta[2][3] = { {2,2,3}, {3,4,5} };
▶ 按存储顺序进⾏初始化(先存放第1⾏,再存放第2⾏)
inta[2][3] = {2,2,3,3,4,5};
▶ 对部分元素进⾏初始化
inta[2][3] = { {2}, {3,4} };
intb[3][3] = { { }, { , ,2}, {1,2,3}};
可以省略⾏数,但是不可以省略列数
▶ 如果只初始化了部分元素,可以省略⾏数,但是不可以省略列数
inta[3] = {1,2,3,4,5,6};
inta[3] = {{1,2,3}, {3,5}, {}};
有些⼈可能想不明⽩,为什么可以省略⾏数,但不可以省略列数。也有⼈可能会问,可不可以只指定⾏数,但是省略列数?
其实这个问题很简单,如果我们这样写:
inta[2] = {1,2,3,4,5,6}; // 错误写法
⼤家都知道,⼆维数组会先存放第1⾏的元素,由于不确定列数,也就是不确定第1⾏要存放多少个元素,所以这⾥会产⽣很多种情况,可能1、2是属于第1⾏的,也可能1、2、3、4是第⼀⾏的,甚⾄1、2、3、4、5、6全部都是属于第1⾏的
☀ 三维乃⾄更多维的数组就不再提及了,⼤家以此类推。
977 829 392!如果你感兴趣或者有想学习更多的关于C语⾔/C++的编程知识的,笔者推荐我⼀个编程技术学习交流俱乐部~企鹅社区 977 829 392
需求的话可以申请⼀下!
如果你喜欢我的⽂章请帮我点⼀下关注、留⾔、分享,感谢!
2020

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。