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] <<"\t";
35         //输出的数组元素是地址,也就是tempOne,tempTwo,tempThree,tempFour,tempFive的地址
36     }
37     cout << endl;
38     for (int i = 0; i < SIZE; i++)
39     {
40         cout << *arrayOne[i] <<"\t";
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 << "\t";
55         ++pointer;
56     //以下两种方法也可输出数组元素
57     //cout<<*(pointer+i)<<"\t";
58     //cout<<pointer[i]<<"\t";
59     }
60     cout << endl;
61 
62     delete(test);
63     system("pause");
64 }

 

posted @ 2016-11-29 15:05  436酱油哥  阅读(1770)  评论(0编辑  收藏  举报