概 念:指针就是地址
数组的关系:数组名就是数组的首地址
开始定义的时候加*, 比如: int *p;/*这里加*是表示p是一个int型的指针*/
指向值的时候加*, 比如: int *p,a; *p=a;
指向地址的时候不加*, 比如: int *p,a[3];p=a;或*p=a[0];
开始定义的时候 *是表明p是指针
到后面用的时候 p表示地址,*p表示p指向"地址的值"
举例:
int a=1;
int *p
p=&a;
printf("%d%d",*p,p);
这个时候两个输出的值
第一个就是1(变量的值)
第二个输出的是变量a的地址
int *p;
int **pp;
int ***ppp;
int a = 1;
pp = &p;//取指针p的地址
ppp = &pp;//取指针pp的地址
**ppp = &a;//等同于p的指向,把p指向到a的地址
//画个草稿图(非标准),作为自己理解用
/*
变量:a a的值为: 1
&取地址
_____________________________
| 地址 | 值 |
| -1073752412 | 1 |
|_____________|_____________| */
NSLog(@"===========a的地址=============");
NSLog(@" a的地址:%d",&a);//通过& (&a) 能取到 a的地址
NSLog(@"===========1级指针=============");
/*
1级指针声名:*p 名字:p 指向变量 a: p = &a;
&取地址 *取得指向地址的值
_____________________________
| 地址 |值(p的指向地址)|
| -1073752400 | -1073752412 |
|_____________|_____________| */
NSLog(@" p的地址:%d",&p); //通过 & (&p)取得 p的地址
NSLog(@" p的值:%d", p);//p的值(p的指向地址)
NSLog(@" *p(1级)指向地址的值:%d",*p);//a的值
NSLog(@"===========2级指针=============");
/*
2级指针声名:**pp 名字:pp 指向指针 p: pp = &p;
&取地址 *取得指向地址的值
______________________________
| 地址 |值(pp的指向地址)|
| -1073752404 | -1073752400 |
|_____________|______________| */
NSLog(@" pp的地址:%d",&pp); //通过 & (&pp)取得 pp的地址
NSLog(@" pp的值:%d",pp); //(指针pp)的值.(pp的指向地址)
NSLog(@" *pp(1级)指向地址的值:%d",*pp); //(指针 p)的值.
NSLog(@" **pp(2级)指向地址的值:%d",**pp);//2级指向,往下指两次,得到值.(第1级取得pp指向地址的值(p),第2级得到p指向地址的值(a))
NSLog(@"===========3级指针=============");
/*
3级指针声名:***ppp 名字:ppp 指向指针 pp: ppp = &pp;
&取地址 *取得指向地址的值
_____________________________
| 地址 |值(pp的指向地址)|
| -1073752408 | -1073752404 |
|_____________|______________| */
NSLog(@" ppp的地址:%d",&ppp); //通过 & (&ppp)取得 ppp的地址
NSLog(@" ppp的值:%d",ppp); //(指针 ppp)的值. (ppp的指向地址)
NSLog(@" *ppp(1级)指向地址的值:%d",*ppp); //取得指向地址下一级的值.
NSLog(@" **ppp(2级)指向地址的值:%d",**ppp); //取得指向地址下二级的值.
NSLog(@"***ppp(3级)指向地址的值:%d",***ppp);//取得指向地址下三级的值.