05_C++数组指针和指针数组

Q星星 / 2024-03-18 / 原文

1.数组指针:当数组指针指向一个一维数组时,()优先级高,说明p是指针,指向一个整型的一维数组。这个一维数组的长度是n,也可以说p的步长为n。当p+1时,p指针会跨过n个整型数据的长度。

2.指针数组:当定义一个一维数组时,系统会在内存中为改数组分配一个储存空间,其数组的变量名就是数组的首地址。若定义一个指针变量,并将数组的首地址赋值给指针变量,则我们说该指针指向了这个一维数组

是一个由n个指针类型元素组成的指针数组,或者说这个当一个数组里含有的元素为指针类型的时候,它就被成为指针数组。

#include<iostream>
#include<string>
using namespace std;int main() {
    //含有5个整数的数组,元素值分别为1,2,3,4,5
    int arr[5] = { 1,2,3,4,5 };
    //数组指针,由内向外的顺序,首先p是个指针,指向大小为5的数组的指针
    int(*p)[5] = &arr;
    //指针数组,通过循环将arr数组每行的首地址分别赋值给q里的元素
    int* q[5];
    for (int i=0;i<5;i++)
        q[i] = &arr[i];
    
    cout << "arr:" << arr << endl;
    cout << " &arr[0]" << &arr[0] << endl;
    cout << "p[0]:" << p[0] << endl;
    cout << "*p:" << *p << endl;
    cout << "*p[0]:" << *p[0] << endl;
    cout << "**p:" << **p << endl;
    cout << "*************"  << endl;
    cout << "&(p[0]):" << &(p[0]) << endl;
    cout << "&(*p):" << &(*p) << endl;
    cout << "*************" << endl;
    cout << "q[0]:" << q[0] << endl;
    cout << "&(q[0]):" << &(q[0]) << endl;

    //访问数组元素
    for (auto i : arr)
        cout << i << endl;
    for (auto i : q)
        cout << i << endl;

}

 输出

 当定义一个一维数组时,系统会在内存中为改数组分配一个储存空间,其数组的变量名就是数组的首地址。若定义一个指针变量,并将数组的首地址赋值给指针变量,则我们说该指针指向了这个一维数组。arr[0]的地址也是数组的首地址。

通过循环将arr数组每行的首地址分别赋值给q里的元素,这里int * q[5]表示一个一维数组内存放五个指针变量,q[0]存储的是指向arr[0]的指针,以此类推。