指针数组
/*
指针数组
数组的类型可以是任意类型,比如整数数组,double数组,char数组,当然可以是指针数组
数组里的每个元素都是装的一个地址,如果是整数指针数组表示数组里的各元素都是一个整数变量的地址
本质上是数组,是存储地址的数组
*/
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
// 一、指针数组
int a=3,b=4,c=5,d=6;
int *p[4] = {&a,&b,&c,&d}; //里面的每个元素都是地址,元素类型为int*类型,长度为4
for(int i=0;i<4;i++){
cout<<*(p[i])<<endl; // p[i] 取出的是地址,*(p[i]) 是这个地址对应空间的值
// cout<<*p[i]<<endl; //也可以不加括号,因为[]优先级比*更高,如果不确定时最好加上
}
cout<<endl;
/*
输出:
3
4
5
6
*/
// 二、数组的拉链结构(指针数组的应用)
/*
用一维指针数组存储的每个元素为地址指向的是一个数组,可以不同长度的数组,相当于二维数,但二维数组的元素个数要一样,但拉链结构可以不同
访问方式与二维数组类似
*/
int a1[] = {2,3,4};
int a2[] = {4,5,6,7};
int a3[] = {1,2};
int *p1[3] = {a1,a2,&a3[0]}; //把数组地址存入指针数组中 &a3[0]与a3等价
cout<<p1[1][1]<<endl; // p1[1] 是下标1元素为a2,a2是一个地址 a2+[1],满足地址+偏移量,所以取了数组a2偏移为1的内容
cout<<p1[1][2]<<endl;
cout<<endl;
/*
输出:
5
6
*/
return 0;
}