linux-c之数组的一个总结

一、一维数组

整型数组的定义、初始化、遍历
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):对二维数组的地址取值在取值等于首个一维数组的首元素地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值