一、一维数组
整型数组的定义、初始化、遍历
1、定义与应用、遍历
2、数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理
#define ARRAY_SIZE_MAX (1*1024*1024)
void function1()
{
char array[ARRAY_SIZE_MAX] = {0}; //声明时使用{0}初始化为全0
}
void function2()
{
char array[ARRAY_SIZE_MAX];
memset(array, 0, ARRAY_SIZE_MAX); //使用memset方法
}
void function3()
{
int i = 0;
char array[ARRAY_SIZE_MAX];
for (i = 0; i < ARRAY_SIZE_MAX; i++) //for循环赋值
{
array[i] = 0;
}
}
【取舍问题】
对三种方法的选取:
1、for 最浪费时间,不建议(其实memset内部也是用循环实现的,只不过memset经过了严格优化,所以性能更高);
2、{0} 可能有移植性问题,虽然绝大多数编译器看到{0} 都是将数组全部初始化为0, 但是不保证所有编译器都是这样实现的;
3、综合1、2, 推荐使用memset方法。
数组名是指针常量,保存数组首元素的地址。
int a[3];
&a:对一维数组名取地址就是一维数组的地址。
*(&a): 对一维数组的地址取值等于一维数组首元素的地址。
二、二维数组
int a[i][j];
如何用指针表达式来表达?
首先我们必须明白:
一维数组的里面的单位是元素;
二维数组的元素就是一维数组;
三维数组的元素就是二维数组;
a + i : 第i + 1个一维数组的地址
*(a + i) : 第i + 1个一维数组的首元素的地址;
*(a + i ) + j : 第i + 1个一维数组的第 j + 1 个元素的地址
* ( *( a + i ) + j ) :第i + 1个一维数组的第 j + 1 个元素的值
下面讲一下二维数组名的作用:
int aa[N][N];
aa:首个一维数组的地址
*aa :首个一维数组首元素的地址
**aa: 首个一维数组的首元素的值
&aa:对二维数组名取值等于二维数组的地址
*(&aa):对二维数组的地址取值等于首个一维数组的地址
**(&aa):对二维数组的地址取值在取值等于首个一维数组的首元素地址