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;  
}  

posted @ 2021-05-08 15:40  YoungMann  阅读(46)  评论(0)    收藏  举报