#include<stdio.h>
/*
1.指针数组:表示一个数组,用来存指针的数组就叫指针数组,数组里面的元素都是指针;
2.定义方式为:int *p[3];表示定义一个可以存三个int指针的数组
赋值:int a1=1,a2=2,a3=3; int *p[3]={&a1,&a2,&a3};
取值:int *a=[0];
*/
/*
1.数组的指针:表示一个指针,而这个指针类型是数组
2.定义方式:int (*p)[3];表示这是一个含有三个元素的int数组的指针.
赋值:int arr[3]={1,2,3}; int(*p)[3]=&arr;
*/
/*
1.数组元素的指针:
表示一个指针,而这个指针存的是数组一个元素的地址.
int arr[1]={1};int *p=&arr[0];
*/
/*
特点:
1.数组名表示第一个元素的地址,&数组名表示整个数组的地址.二者值相同,但意义不同
2.指针可以运算.但权限仅限与加减运算,运算的实质就是地址运算.即地址的移动(*p=*p+1;不对)
3.地址+1向高位移动,而-1向低位移动.不同指针类型移动一位的字节数不同
4.实际移动的字节数看指针类型,类型占多少个字节,一位就移动多少个字节
*/
int main(){
// int arr[]={1,3,5};
// int *p=arr;//相当于int *p=&arr[0];
// int a=*p;
// a=*(p+1);//此处需要注意左右数据类型的严格对照;
// printf("*(p+1)=%d\n",a);
// a=*(p-1);
// printf("*(p-1)=%d\n",a);
// return 0;
//定义一个指针数组
int *P[3];
int a1=1,a2=2,a3=3;
//创建三个指针(int型)
int *p1=&a1;
int *p2=&a2;
int *p3=&a3;
//给数组赋值
p[0]=p1;
p[1]=p2;
p[2]=p3;
//取值
int *ptemp=p[0];
printf("p1=%p,ptemp=%p\n",p1,ptemp);
return 0;
}
|
|