局部变量的回收:在大括弧执行完毕之后,定义在这个大括弧中的变量就会被系统立即回收,声明变量的时候,其实是找系统为你从高地址向低地址分配指定字节数的连续空间,当变量回收的时候,其实就是告诉系统变量占用的字节不再使用了,可以分配给别的变量了,变量所占用的字节的数据是不会清空的【垃圾值的由来】
当将全局变量声明出来以后,系统会自动的将全局变量中的数据清零
一维数组:
int arr[3];
,其中所有的元素具有相同的数据类型,一旦创建,不能改变大小
数组中的元素在内存中是连续依次排列的:
遍历数组:
一维数组的初始化:
1)使用这种方式初始化,数组的长度就不能使用变量了,但是使用宏可以【也可以干脆直接省略数组中的长度,这样数组的长度就是由大括弧中的数据的个数来决定的】
1 | int len=3; |
2)int arr[3]={10};
这个时候数组的第0个元素的值是10,其他的元素的值被自动初始化为0,所以如果我们要将数组中的所有元素全部初始化为0,只需要在大括弧中写一个0就可以了
3)指定下标的初始化,其他的元素的值就自动初始化为0:int arr[3]={[1]=10,[2]=20};
声明一个数组,在内存中从高字节向低字节申请连续的(数组的长度*每个元素的字节数)个字节的空间
数组的元素的本质就是一个普通类型的变量,一个数组就是由多个普通类型的变量联合而成的
C语言的数组名中存储的就是数组的地址!
数组的大小:sizeof(a)/sizeof(a[0])
sizeof给出整个数组所占据的内容的大小,单位是字节;sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数;这样的代码,一旦修改数组中初始的数据,不需要修改遍历的代码
数组的赋值:数组变量本身不能被赋值,要把一个数组的所有元素交给另一个数组,必须采用遍历
1 | for(int i=0;i<length;i++){ |
二维数组:
二维数组的长度一般认为是元素的个数【行*列】
二维数组的遍历:a[i][j]是一个int,表示第i行第j列上的单元
二维数组的初始化:
1)
1.列数是必须给出的,行数可以由编译器来数
2.每行一个{},逗号分隔
3.最后的逗号可以存在,有古老的传统
2)
1 | int arr[3][4]={{10},{20},{30}}; |
其他元素会自动初始化为0
3)int arr[3][4]={10,20,30,40,50};
按照顺序去初始化每一个元素,其他的元素的值就会被自动初始化为0
4)int arr[3][4]={[1]={10,20,30,40},[2]={50,60,70,80}};
给指定的行初始化,其他的元素自动初始化为0
二维数组从高地址向低地址申请了连续的(行列每一个元素占用的字节)个字节空间
二维数组在内存中仍然是一块连续的空间,并不是一个表格
求二维数组的长度的方法与一维数组一样:sizeof(arr)/sizeof(arr[0][0]);
求二维数组的行数:sizeof(arr)/sizeof(arr[0]);
求二维数组的列数:sizeof(arr[0])/sizeof(arr[0][0]);
如果函数的参数是一个一维数组,那么我们在传递的时候可以传递二维数组的某一行,二维数组的行其实是一个一维数组
二维数组也可以作为函数的参数【与一维数组类似】,但是其中形参的行数可以省略,列数不能省略,实参与形参的行数可以任意,实参的列数与形参的列数必须一致
解决方案【与一维数组稍微不同!】