数组:是具有相同类型的数据组成的序列,是有序集合。(他在内存中的分布是从低地址到高地址的,是一个个挨着来存储的,所以说是有序的集合而不是里边的内容是有序的)
1、一维数组定义:
类型说明符 数组名[常量表达式]
PS:一维数组在内存中的存放。(任何程序包括操作系统在运行的时候,都要加载进内存而不是在硬盘上运行的,在硬盘上是不可能运行的,CPU是从内存上调数据,内存再从硬盘上取数据,这样一个动态的过程,所以你一个东西要运行,要在CPU里运行是在内存中的,任何程序一运行他就加载到内存中了,所以呢,例如说你要想盗什么密码之类的,你应该从内存去入手,因为他的编译整个过程都是在内存中运行的)
低地址 | 86 | mark[0] |
92 | mark[1] | |
77 | mark[2] | |
52 | mark[3] | |
... | ... | |
高地址 | 94 | mark[99] |
数组名其实就是这个数组第一个元素的首地址。
2、二维数组定义的一般形式为:
类型说明符 数组名 [常量表达式] [常量表达式]
二维数组在概念是二维的,但是实际的硬件存储器却是连续编址,也就是说存储器单元是按一维线性单元排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列,在C语言中,二维数组是按行排列的。
数组在编译时就要说明所占的空间有多少(就是那个常量表达式)。赋值是在运行的时候赋值的。
用宏定义注释掉一段语句,让他不执行:
#if(0)
语句1;//语句1永远不会被编译,因为if后边是0,为假跳过。
#endif
3、程序在编译运行时普通的变量是存放在堆栈区的,栈区的;而static会使得普通的变量存放在数据区也就是data区,data区一般是不能改变的,像常量,字符串一般都是在data区。
PS:无论你是什么语言,在内存中他一般都是这样的,我们整个内存主要分为四大区:
1):CODE(代码区)
2):DATA(数据区)(存放常量,字符串以及用static定义的变量)(数据区的特点不会因为这个函数的退出,而使定义的变量消失)(DATA区是在整个程序退出他才会释放)
3):STACK(栈区)(我们任何一个程序要运行的化,他都会把一些数据或者这个函数要调用的一些变量推进这个栈里面,再后在进行运行,之后等这个函数调用完之后就会把这个栈给释放,要不然你的内存是远远不够用的)
4):HEAP区(像STACK区是由程序自己释放和生成的,而HEAP区不同,HEAP区的分配大小是由程序员自己规定的,你规定他多大就是多大,当然你不能超出它的范围,)
要了解一下这四个分区。。。。。