1.<指针数组>:
什么是指针数组,用来表示一个数组,用来存放指针的数组就叫指针数组,数组里面的员都是指针;
如: int *p[3]:,表示一个可以存三个 int 指针的 数组
赋值: int a1=1,a2=2,a3=3;
int *p[3]={&a1,&a2,&a3};
取值: int *a=p[0];
2.<数组的指针>
表示一个指针,这个指针的类型是数组,
定义:固定写法,一定要加括号,不然变量P先与[]结合,成数组了
如: int (*p)[3];
赋值: int arr[3]={1,2,3}; //arr表示一个数组,里面包含第一个元素的地址;arr=&arr[0]
p=&arr;//表示取数组的地址,p是一个数组的指针;
pinrtf("%d",(*p)[0]);//用数组指针,表示里面的值; //*p 等效于arr;
int *p1=arr; //定义一个指针,指向数组arr ,表示数组首元素的指针;
3.<数组元素指针>
什么是数组元素指针:表示一个指针,这个指针存得时数组的一个元素的地址
int arr[1]={1};
int *p=&arr[0]; //*p=arr;
printf("%d",*p); //*p 指向了数组arr第一个元素,*p=第一个元素的值;
4.<数组指针特点>
1).数组名表示第一个元素的地址,&数组名表示整个数组的地址,二者值相同,意义不同;
2).指针可以运算,但仅限于 加减运算,运算的实质就是地址运算,既地址的移动;
int arr[3]={1,2,3};
int *p=arr //等效于 *p=&arr[0]
int a=*p;
a=*(p+1);//等于 a=arr[1]; -----int *p1=&arr[1] , a=*p1; //P的值并没有改变
1.<二维指针数组>
什么是二维指针数据: 是一个数组,里面的每一个子数组存得元素类型都是指针
例如:
int *pa=&a; int *pb=&b; int *pc=&c;
int *pd=&b; int *pe=&e int *pf=&f;
定义二维指针数组
int *p[2][3]={{pa,pb,pc},{pd,pe,pf}};
int *p1=p[0][0];
2.<二维数组指针>
什么是二维数组指针: 是一个指针,只是指针类型是二维数组;
例如:
int arr[2][3]={{1,2,3},{4,5,6}}; //第二种写法:arr[2][3]={1,2,3,4,5,6};
int (*p)[2][3]=&arr; //是一个二维数组指针;
使用:
(*p)[0][0]==arr[0][0]==1;