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

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]的指针,以此类推。

复制代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;
using std::vector;

int main() {
    //含有7个整数的数组,元素值分别为1,2,3,4,5,6,7
    int arr[7] = { 1,2,3,4,5,6,7 };
    int(*p)[7] = &arr;
    cout << "arr:" << arr << endl;
    cout << " &arr[0]" << &arr[0] << endl;
    cout << "p+1:" << p+1 << endl;
    cout << "*p+1:" << *p+1 << endl;
    cout << "*************" << endl;

    }

}
复制代码

输出:

 

补充:打印p+1与*p+1。p与*p中存放的地址的数值是一样的,但意义却大不一样。p是数组arr的地址,所以p+1跳过了整个数组的字节大小。

数组地址+1减去数组地址,即16进制的CC-B0=1C,转换成10进制就是28,刚好是一个有着7个int类型元素的数组的大小。

*p相当于数组名arr,是数组首元素的地址。所以 *p+1跳过了一个int类型。

根据图中打印出来的地址,我们可以看到:数组首元素地址+1减去数组首元素地址,即16进制的B4-B0=4。这是一个int类型值的大小。

参考:https://blog.csdn.net/2301_77446344/article/details/132852351

posted @   Q星星  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示