数组与指针
【前提】C++ 将数组名解释为一个指针,指向数组的第一个元素的地址;
array1 == &array1[0]
两者等价。
-
1、当某个函数调用数组时:
- 函数声明中形参可以是数组名,但实际函数传递的是地址;
- 当且仅当用于函数头定义 或 函数声明中,数组的名
int arr []
和指针定义int *arr
的含义才是相同的,都意味着 arr 是一个 int 指针。其他地方两者的含义并不相同。 - 综上,到了函数定义体中就不能使用
int arr1[]
来声明一个指针;
-
2、将指针(数组名也是指针)加 1,实际是加了一个与指针指向类型的长度相等的值;理解下述等式:
arr[i] == *(arr + i)
&arr[i] == arr + i
-
3、将数组地址作为参数传入函数,可以
- 节省复制整个数组所需的资源,降低开销;
- 降低对原始数据破坏的风险;(毕竟只是传递了数组的起始地址、元素类型和个数等信息)
本人才疏学浅,上述有错误请各位指正!