C++ | 关于数组
关于数组的一些问题
近日在复习快速排序的过程中,发现在定义一个函数时,形参写的是数组名称[],而在传入实参时则只需要传入数组名称即可。为什么不需要加上方括号呢?以快速排序为例,在定义函数时写的是void quick_sort(int q[], int l, int r),而在传入实际参数时则不必加方括号。
现在看来,之所以要加方括号,是为了提示q相当于一个指针。网上查了一下,在定义函数时还有其他的表示方式,即quick_sort(*q, l, r)。
那么,这里的q和&q又有什么区别呢?在查阅的过程中,发现:
- q指向数组内的首位元素的地址
- &q则指向整个数组的地址。
- &q[i]则指向数组内第i个元素的地址。
假设数组内存储的均为int型变量,那么,q+1相当于 \(q + 1 * sizeof(int)\),代表数组内第2个元素的地址,而&q+1相当于 \(\&q + 1 * sizeof(int)\),表示数组结束后下一段地址的起始位置。
下面这个例子有助于理解这部分内容:
int main(){
int q[5] = {0, 3, 7, 8, 6};
int *p = (int*)(&a + 1);
cout<<*(q + 1)<<' '; // 3
cout<<*(p - 1)<<endl; // 6
return 0;
}

浙公网安备 33010602011771号