数组的使用的几个注意

我们有时会遇到*a或者*(&a)之类的数组使用,a为数组名。那么今天就来简单介绍一下这些:

比如说我们定义一维数组 int a[100];

我们都知道一维指针名 a 保存的是数组首元素的地址,那么是否我们对数组进行遍历就可以像指针一样 a++ 来遍历呢?

答案是不能,因为上面数组首字母的解释并不完整,完整的说法是一维数组名是一个指针常量,它保存数组首元素的地址。

而我们知道,常量是保存在全局数据区中or段(即only red) 只读,并不能进行其他操作。所以不能像指针一样对a++,如果我们想遍历可以把这个地址给一个指针p,让p++。

还有以下几个点需要注意:

&a:    对一维数组名取地址 == 数组的地址;

*(&a):   对一维数组的地址取值  == 数组首元素的地址;

这两个公式可以帮助我们推广到二维数组,三维数组:

例如有二维数组 int b[100][100];

&a   :   对二维数组名取地址  == 二维数组的地址;

*(&a);  对二维数组的地址取值  == 二维数组中首个一维数组的地址;

对多维数组也是以此类推;

怎么去理解一个复杂定义的含义:

例如: *(*(a+i)+j);

让我们一步步去看:

1. a+i                       : 第 i + 1 个一维数组的地址(因为数组下标从0开始,所以是 i+1个)

2.*(a+i)                    : 第 i + 1 个一维数组的首元素的地址;

3.*(a+i)+j                 : 第 i + 1 个一维数组的第 j + 1 个元素的地址;

4.*(*(a+i)+j)         : 第 I + 1 个一维数组的第 j + 1个元素的地址存放的值(即 a[I][j] 的值)

 

在JavaScript中,创建数组有以下几种常见方式: 1. **使用数组字面量**:通过方括号 `[]` 直接创建数组,可同时初始化元素。示例代码如下: ```javascript var arr = ["草履虫", "爱", "毛毛"]; ``` 这种方式简单直观,是最常用的创建数组方法之一[^4]。 2. **使用 `Array` 构造函数**:可以使用 `new Array()` 来创建数组。若不传递参数,则创建一个空数组;若传递一个数字参数,则创建指定长度的数组;若传递多个参数,则将这些参数作为数组元素。示例代码如下: ```javascript var a = new Array(); // 创建空数组 var b = new Array(8); // 创建长度为8的数组 var c = new Array("8"); // 创建包含元素 "8" 的数组 ``` 需要注意,传递单个数字参数时,创建的数组元素为空占位符,而非包含该数字的数组 [^5]。 3. **使用 `Array.of`**:`Array.of()` 方法可以将任意数量的参数转换为数组。示例代码如下: ```javascript var arr = Array.of(1, 2, 3); // 创建包含元素 1, 2, 3 的数组 ``` 与 `Array` 构造函数不同,`Array.of()` 不会将单个数字参数视为数组长度 [^1]。 4. **使用 `Array.from`**:`Array.from()` 方法可以将类数组对象或可迭代对象转换为数组。示例代码如下: ```javascript var str = "hello"; var arr = Array.from(str); // 创建包含字符串每个字符的数组 ``` 常用于将类似数组的对象(如 `arguments` 对象、`NodeList` 等)转换为真正的数组 [^1]。 5. **使用扩展运算符 (`...`)**:扩展运算符可以将一个可迭代对象展开为数组元素。示例代码如下: ```javascript var iterable = [1, 2, 3]; var arr = [...iterable]; // 创建包含 iterable 元素的数组 ``` 可以方便地复制数组或合并多个数组 [^1]。 6. **使用 `fill` 方法**:`fill()` 方法可以用指定值填充数组的所有元素。通常先创建一个指定长度的数组,再使用 `fill()` 填充元素。示例代码如下: ```javascript var filledArray = new Array(5).fill('foo'); // 创建长度为5,元素都为 'foo' 的数组 ``` 适合创建元素值相同的数组 [^2]。 7. **使用循环动态创建**:通过循环来动态添加元素到数组中。示例代码如下: ```javascript var arr = []; for (var i = 0; i < 5; i++) { arr.push(i); } ``` 根据特定条件动态生成数组元素 [^1]。 8. **通过函数返回值**:定义一个函数,在函数内部创建并返回数组。示例代码如下: ```javascript function createArray() { return [1, 2, 3]; } var arr = createArray(); ``` 封装创建数组的逻辑,提高代码复用性 [^1]。 9. **通过构建稀疏数组**:创建包含空占位符的数组。示例代码如下: ```javascript var arr = new Array(5); // 创建长度为5的稀疏数组 ``` 数组元素为空占位符,未显式初始化 [^1]。 10. **使用其他数据结构转换**:将其他数据结构(如 `Set`、`Map` 等)转换为数组。示例代码如下: ```javascript var set = new Set([1, 2, 3]); var arr = Array.from(set); // 将 Set 转换为数组 ``` 在处理不同数据结构时,方便进行数据转换和操作 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值