调用函数,就要在栈上开辟空间,那么现在我们来演示一下函数递归在内存中的路线:(函数递归也是自己调用自己的过程)
数组初始化:数组在定义的时候整体初始化【但是不能整体赋值】
数组的一般知识总结:
1 数组创建,[ ] 中必须放常量,不能放变量
2 数组的初始化,是指创建数组的同时赋给数组一些合理的初始值
3 数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定
4 char arr1[] = "abc"; 数组里面有: 'a' 'b' 'c' '\0' 【'\0'】是字符串结束的标志 【'\0' 就是 0 ,把字符 '0' 转义为 0】
char arr2[3] = {'a','b','c'}; 数组里面有三个字符:'a' 'b' 'c'
5 [ ] ,下标引用操作符。它其实就数组访问的操作符
6 数组是使用下标来访问的,下标是从0开始
7 数组的大小可以通过计算得到 :
int arr[10];
int sz = sizeof(arr) / sizeof(arr[0]);
8 二维数组的创建和初始化
int arr [2][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} };
int arr [ ][5] = { {1, 2, 3, 4, 5}, {6, 7, 8, 9, 10} }; 注意: arr [可以省略 ] [ 不能省略 ]
int arr1 [2][4] = { {2, 3}, {4, 5} }; 实际上是 : { {2, 3, 0, 0}, {4, 5, 0, 0} }
int arr2 [3] [2] = { {1,2}, {3,4} }; 实际上是 : { {1,2}, {3,4},{0, 0} }
9 二维数组在内存中的存储和一维数组一样,一次性开辟,元素从低地址到高地址依次连续增大
10 数组作为函数参数
数组作为函数参数的时候,不会把整个数组的传递过去。
实际上只是把数组的首元素的地址传递过去了。所以即使在函数参数部分写成数组的形式: int arr[ ] 表示的依然是一个指针: int *arr 。
注意:数组传参,如果函数内部需要知道数组元素个数,应该在函数外部算出元素个数,以参数的形式传递给函数。