您的位置:首页 > 运维架构 > Linux

linux-c之数组的一个总结

2016-12-12 20:30 218 查看
一、一维数组

整型数组的定义、初始化、遍历

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):对二维数组的地址取值在取值等于首个一维数组的首元素地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数组
相关文章推荐