zoukankan      html  css  js  c++  java
  • c/c++指针数组和数组指针

    数组指针只是一个指针变量,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。

      指针数组:array of pointers 也就是说数组中的每一个元素都是指针。

      数组指针:a pointer  to an array 也就是用指针指向一个数组。

    下面用一个图来直观看两者区别:

    定义区别:

    1 int* a[4]     指针数组,表示:数组a中的元素都为int型指针, 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*2 int (*a)[4]   数组指针, 表示:指向数组a的指针,元素表示:(*a)[i]  。
    3 
    4 注意:在实际应用中,对于指针数组,我们经常这样使用:
    5 typedef int* pInt;
    6 pInt a[4];
    7 
    8 这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。

    两者的用法大不相同,实例说明:

     1 #include<iostream>
     2 using std::cout;
     3 using std::endl;
     4 #define SIZE 5
     5 class Test{
     6 private:
     7     
     8 public:
     9         
    10 };
    11 void main()
    12 {
    13     
    14     Test *test = new Test();
    15 
    16     int tempOne = 10;
    17     int tempTwo = 20;
    18     int tempThree = 30;
    19     int tempFour = 40;
    20     int tempFive = 50;
    21 
    22     //指针数组的用法;数组中的每一个元素都是地址
    23     int *arrayOne[SIZE];    //定义指针数组,数组中的每个元素都是地址,可是变量地址,结构体地址,数组地址等,不一一举例,以变量为例
    24 
    25     cout << tempOne << endl;
    26     arrayOne[0] = &tempOne;
    27     arrayOne[1] = &tempTwo;
    28     arrayOne[2] = &tempThree;
    29     arrayOne[3] = &tempFour;
    30     arrayOne[4] = &tempFive;
    31     
    32     for (int i = 0; i < SIZE; i++)
    33     {
    34         cout << arrayOne[i] <<"	";
    35         //输出的数组元素是地址,也就是tempOne,tempTwo,tempThree,tempFour,tempFive的地址
    36     }
    37     cout << endl;
    38     for (int i = 0; i < SIZE; i++)
    39     {
    40         cout << *arrayOne[i] <<"	";
    41         //输出的是指针地址对应的值,也就是tempOne,tempTwo,tempThree,tempFour,tempFive的值
    42     }
    43     cout << endl;
    44     //数组指针的用法,不是真正的数组指针,指示模拟指针指向数组首地址
    45     
    46     int array[SIZE] { 10, 20, 30, 40, 50 };//数组初始化
    47     int *pointer;    //定义一个指针,指向数组(指向数组首地址)    //数组指针定义为 int (*pointer)[SIZE];用法笔者没用过不阐述
    48     pointer = array;
    49     
    50     cout << array << endl;//输出数组首地址
    51     cout << pointer << endl;
    52     for (int i = 0; i < SIZE; i++)
    53     {
    54         cout << *pointer << "	";
    55         ++pointer;
    56     //以下两种方法也可输出数组元素
    57     //cout<<*(pointer+i)<<"	";
    58     //cout<<pointer[i]<<"	";
    59     }
    60     cout << endl;
    61 
    62     delete(test);
    63     system("pause");
    64 }
  • 相关阅读:
    【技能】Ext.Viewport 实现左三右一排列方式。
    Android之——短信的备份与还原
    草根做项目的经验分享一
    【转】每天一个linux命令目录
    【转】每天一个linux命令(61):wget命令
    【转】每天一个linux命令(60):scp命令
    【转】每天一个linux命令(59):rcp命令
    【转】每天一个linux命令(58):telnet命令
    【转】每天一个linux命令(57):ss命令
    【转】每天一个linux命令(56):netstat命令
  • 原文地址:https://www.cnblogs.com/spring-hailong/p/6113697.html
Copyright © 2011-2022 走看看