快捷搜索:  汽车  科技

c语言数组基本操作(C语言学习篇12-----数组的深入理解)

c语言数组基本操作(C语言学习篇12-----数组的深入理解)2.a[0]: 就是数组的首元素,也就是数组的第0个元素。做左值时,表示数组第0个元素的对应的内存空间(连续4字节);做右值时表示第0个元素的值符号a分析类型决定地址延续长度这里以int a[5]为例分析:1.a:就是数组名,a做左值表示数组的所有空间(sizeof(int)*5,以32位系统为例,则等于20),但是限于C语言规定不能整体操作数组,故而此时a不能做左值; a做右值表示数组首元素的首地址(即a[0]的地址),即a做右值等同于&a[0]

数组作为日常编写程序较常用的数据类型,常常用于定义多个相同数据类型的数据时,如int animal[10]

。今天就讲讲从内存,编译器等多角度认识数组的本质,以及为什么发明数组的原因,数组与指针的关系。

内存角度来理解数组
  1. 当我们分开定义多个变量(如int a b c d)和一次定义一个数组(int a[4]),这两种不同定义的方式有啥区别呢?
  2. 首先共同点都是定义了4个int类型的数据,而且这4个变量都是独立单个使用的。不同在于单独定义的a b c d在内存中的地址不一定相连,而以数组方式定义,数组中的元素(数据)地址肯定是依次相连的,因此很适合用指针进行操作,可以说数组与指针是紧密相关的,数组是指针操作的一种简单封装。

c语言数组基本操作(C语言学习篇12-----数组的深入理解)(1)

内存分配区别

编译器角度来理解数组

从编译器角度方面,数组变量也是变量,和普通变量,指针变量没有本质不同。变量的本质就是一个地址,地址由编译器决定(当然可以使用一些编译器指令指定其定义在哪些段或地址上),具体的数值就和该变量名绑定了,当使用该变量名时,就相当于引用该变量名绑定的内存地址内容。变量类型决定了这个地址的延续长度。

c语言数组基本操作(C语言学习篇12-----数组的深入理解)(2)

类型决定地址延续长度

数组应用中常见关键符号(a a[0] &a &a[0])

这里以int a[5]为例分析:

1.a:就是数组名,a做左值表示数组的所有空间(sizeof(int)*5,以32位系统为例,则等于20),但是限于C语言规定不能整体操作数组,故而此时a不能做左值; a做右值表示数组首元素的首地址(即a[0]的地址),即a做右值等同于&a[0]

c语言数组基本操作(C语言学习篇12-----数组的深入理解)(3)

符号a分析

2.a[0]: 就是数组的首元素,也就是数组的第0个元素。做左值时,表示数组第0个元素的对应的内存空间(连续4字节);做右值时表示第0个元素的值

c语言数组基本操作(C语言学习篇12-----数组的深入理解)(4)

符号a[0]分析

3.&a:就是数组名a取地址,本质是数组的地址,&a不能做左值,因为它是个常量,在编译时,编译器已经为其分配了固定内存地址,因此不能赋值,不能做左值使用;做右值时表示整个数组的首地址,这个特别要主要的是,其值与&a[0]是相等的,但是其含义不同!后续若进行地址运算就能体现其差异!!!

c语言数组基本操作(C语言学习篇12-----数组的深入理解)(5)

符号&a分析

4.&a[0]:就是数组第0个元素的首地址,做左值时表示数组首元素对应的内存空间;做右值时表示数组首元素的内存地址。分析参考符号a。

总结

数组和指针紧密相关,分析以上数组关键符号,需要结合内存示意图一起分析,明白数组其背后的原理和关键点,在编程中灵活使用。 好了,今天的分享到此,我会不间断更新C语言学习相关的内容分享,感兴趣的小伙伴记得关注,收藏,不迷路~

c语言数组基本操作(C语言学习篇12-----数组的深入理解)(6)

C语言学习笔记分享

猜您喜欢: