指针与数组(二)

发布时间 2023-03-26 11:31:25作者: blogzzt

指针和数组之间的替换 :

一维数组和指针:

  1. 数组名是数组的首地址
  2. 数组名是一个常指针 不可修改
  3. 可以对指针操作来访问元素

访问数组的方式:
1.直接访问数组
a[5];

2.使用指针
*p 等价于a[0]
*(p+1)等价于a[1]

3.修改数组的值
a[5]=10;
*(p+5)=10;

 

实例:

main() {
    int a[ARRAY_SIZE];  // 数组
    for (int i = 0; i < ARRAY_SIZE; ++i) {
        a[i] = i;
    }
    int *p = a;    // int *p; (1) p = a; (2) p = &a[0];//这两种是等价的指针指向数组首地址
        cout << "print array:" << endl;
    for (int i = 0; i < ARRAY_SIZE; ++i) {
        cout << *(p + i) << " ";
    } 

}

 

 

 

指针数组和数组指针: 

1.指针数组: int *p[10] (等价于 int *(p[10])), 因为[ ]的优先级大于 * 所以p和[ ]结合

指向:10个int 型的指针

2.数组指针: int (*p)[10] 相当于 int p[][10] ,二维数组就是数组指针

指向:p指向一个数组,该数组为10个int型的元素

3.二维数组拆解:

a[i][j] = *(a[i]+j) = *(*(a+i)+j) = (*(a+i))[j]

指针数组的使用:

    int a[10] = { 1,2,3,4,5,6,7,8,9 };
    int* p[10];//指针数组  含有 10个 int型指针
    p[0] = &a[0]; //p[0]指向a[0]的地址
    p[1] = &a[1]; //p[1]指向a[1]的地址
    cout << *(p[0]) << endl;//输出a[0]的值
    cout << *(p[0] + 1) << endl;//输出a[2]的值
    cout << *(p[1]) << endl;//输出a[2]的值
 
存储一个字符串列表
    const char *p[4] = { "aaaa","bbbb","cccc","dddd" };
    for (int i = 0; i < 4; i++)
    {
        cout << p[i] << endl;//输出字符串
        cout<<*(p[i])<< endl;//输出单个字符
    }

 

参考链接:

https://blog.csdn.net/qq_45303986/article/details/125173622