函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// main.m
#import <Foundation/Foundation.h>

// C风格函数
int sumFunc(int a, int b) {
return a + b;
}

int main(int argc, const char * argv[]) {
@autoreleasepool {
int sum = sumFunc(1, 2);
NGLog(@"sum = %d", sum);
}
return 0;
}

指针 和 block

常用于多线程、异步任务、集合遍历、集合排序、动画转场

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// main.m

void test() {
printf("喵喵喵");
}

int sum(a, b) {
return a + b;
}

// 定义指针
void (*p)();

// 定义block
typedef int (^b)(int, int);

int main(int argc, const char * argv[]) {
@autoreleasepool {
// 指向test
p = test;
// 调用
(*p)(); // = test(); = p();

// block也可以调用函数
b = sum;
b(1, 2);

// 直接定义函数
void(^myBlock)() = ^{
NSLog(@"这是个block");
}

// 带参数
void(^myBlock2)() = ^(int a, int b) {
return a + b;
}
}
}

结构体 和 指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// main.m
@autoreleasepool {
// 定义结构体
struct point {
int x;
int y;

// 指针
struct point * nextP;
}
// 创建
struct point p;
// 赋值
p.x = 10;
p.y = 10;

// 第二个结构体
struct circle {
// 可以包含其他结构体
struct point pp;
// 定义本结构体的变量
int radius;
}

struct circle c;

c.pp = p;
c.radius = 50;

// 定义结构体也可以使用
typedef struct _student {
char name;
int age;
} student;
// 调用
student a;
a.name = "喵喵喵";
a.age = 20;

// 使用指针
struct point * tmpPoint;
// 指向p的地址
tmpPoint = &p;

tmpPoint->x = 10;
tmpPoint->y = 10;

// 使用内部定义的指针指向pointB的地址
struct point pointB;
pointB.x = 233;
pointB.y = 233;
p.nextP = &pointB;
}