C 指针
图示:
1000、1001 这些数字表示内存地址,A 表示一个字节的内存空间。char a = 'A'; printf("%d",&a); // -> 1000 | 变量 a 在内存中的地址(指针)printf("%c",a); // -> A | 变量 a 的值
说明:
char a = 'A'; 申明了一个 char 型变量 a ,a 中是字符 'A' ,变量 a 放在地址(指针)为 1000 的内存空间。一般指针:
char bb = 'B';char *b = &bb;printf("%c",*b); // -> Bprintf("%d",b); // -> 1001
说明:
char *b = 'B'; char 指定指针变量 b 中存储的地址(指针)指向一个或多个 char 型值。'B' 说明 b 中存储的指针指向的内存中存储了一个 char 型值。总结: 变量都是容器,变量都放在对应地址的内存空间中,普通变量直接存储对应类型的 value,指针变量存储指向对应类型 value 的指针。
指针和数据结构:
struct WHPoint { int x; int y;};typedef struct WHPoint WHPoint;WHPoint p;p.x = 10;p.y = 10;WHPoint *point = &p;CGFloat x_ = (*point).x;CGFloat y_ = point->y;
说明:
在 Objective-C 中,一切对象皆数据结构。所以数据结构指针有了一个指针运算符 "->"。函数指针:
// 常规写法 returnType (* Name) (params) int max (int a , int b) { // 函数 return MAX(a, b);}// int (* tMax) (int a , int b) 申明一个名字为 tMax 的函数指针变量,将其作为另一个函数的参数int bMax (int c , int d , int (* tMax) (int a , int b)) { return tMax(c, d); // return (*tMax)(c, d);}typedef int (* tTMax) (int a , int b);int bBMax (int c , int d , tTMax tMax) { return tMax(c, d);}