运算符 &
每个变量均对应内存中的一块内存空间,而内存中每个内存单元均是有地址编号的。
可以使用运算符 & 求某个变量的地址。
int a = 10;
// a表示变量的值
// &a 变量a的地址
指针变量的定义
类型 *变量名;
可以保存地址值(指针)的变量称为指针变量
int *b = &a;
// b 表示变量a的地址
// *b 表示地址指向的值
// &p 表示指针变量b的地址
NSLog(@"%d %p",a, &a);
// 20 0x7ffee01517ac
// 20 0x7ffee01517ac 0x7ffee01517a0
NSLog(@"%d %p %p",*b, b, &b);
指针与数组
int a[5] = {1,2,3,4,5};
int *p = a;
NSLog(@"%p %p",p,a);
// 0x7ffeed4817b0
// 0x7ffeed4817b0
NSLog(@"%d",*p); // 1
// 所以a是数组的首地址
int *c = (int *)&a;
// c表示存数组的地址
NSLog(@"%p %p %p",c, &a, &a+1);
// 0x7ffee1b217b0
// 0x7ffee1b217b0
// 0x7ffee1b217c4 // 差了20
// 数组长度为5, int 占4个字节 5 * 4 = 20
int *d = &a+1;
// d表示 a[4] 之后的地址,一个包含 5 个int元素的数组的首地址
NSLog(@"%d",*(d-2)); // 4
NSLog(@"%d",a[5-2]); // 4
网友评论