本帖最后由 ios小白成长记 于 2015-11-29 14:04 编辑
/*如何判别指针数组与数组指针: 有括号的是数组指针 如 int (*p)[3]; 无括号的是指针数组 如 int *p[3] */
指针数组的实质还是一个数组.
指针数组: 指针数组是用一个数组来表示多个指针,所以数组里面的元素都是代表地址的指针. // 如 int *p里面的p就是一个指针,他的类型是int *类型,里面将要存储的是一个地址,而*p则表示这个地址里面的值.下面有图可以自己理解.如图: 每次定义一个数据,都会开辟一块存储空间,每个空间都有一个地址,把地址赋值给指针,就可以通过地址来寻找到这个地址里面所存储的数据.
int a=3,b=4,c=5;
int *p1=&a;
int *p2=&b;
int *p3=&c;
int *arr[3]={p1,p2,p3}; //表示3个元素的数组,里面存储的都是指针,也就是存储了3个地址.
print("%p\n",arr[0]);//打印出每个指针元数里面地址
print("%p\n",arr[1]);
print("%p\n",arr[2]);
print("%d\n",*arr[0]);//打印出每个指针元数里面地址所指向的那片空间的数据 此处带上*表示得到的是每个地址里面的数据
print("%d\n",*arr[1]);
print("%d\n",*arr[2]);
/*
指针注意点,没有初始化就不能使用;
情况1: 如 int *p;
*p=5;
printf("%d",*p); //错误 因为指针没有得到一个地址,所以未被初始化,不知道自己所指向的空间是那一块.所以不能够打印
情况2: int a=5; int *p=&a; //正确
int a=5 ; int *p; p=&a; // 正确
int a=5; int *p; *p=&a //错误 ,给p赋值时,要将(int *)看做一个整体,只有取p所指向那片空间的值时才用 *p.
*/
|
|