首页 > 代码库 > IOS学习之路-- 指针&宏函数
IOS学习之路-- 指针&宏函数
- 如果*p被()包住,说明指针变量p将来指向的是函数
//声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p = test; // 利用指针变量p间接调用了test函数 //(*p)(); //test(); p();
- 结构体占用的空间大小
默认情况下,一个结构体变量所占有的存储空间是所有成员的总和。
sizeof计算的结构体所占用存储空间时,返回的值必须是最大成员的倍数。
- 结构体的省略写法
省略了结构体的名称,这种方法没有重用性。
在结构图的最后加入的内容是 同时定义的变量。
struct { double width; double height; } s;
注意: 如果想给结构体使用{}的方式一次性赋值,只能在定义变量的同事进行。
- 结构体作为函数参数时,只是成员的值传递(修改函数内部的结构体,并不影响外面的结构体)
struct Person { int age;};// 这种方式是值传递, 不会真的改变nochange的值void changePersonWithAge1(struct Person nochange) { nochange.age = 100;}// 这种传递的是指针,指针指向同一个内容,可以真正改变void changePersonWithAge2(struct Person *change) {// (*change).age = 100; change->age = 100; // 等价于上面那行。}int main(){ struct Person p1 = {5};// changePersonWithAge1(p1); changePersonWithAge2(&p1); // 引用传递,要传递指针 printf("%d\n", p1.age);}
- 宏定义:
#define 宏名 值
#undef 宏名
作用:宏替换,在翻译之前,将代码中的所有宏名都替换成对应的值。
宏名最好都用大写,跟函数区分开。可以使用在任何地方(代码段中,头部,任何地方)
// 带参数的宏定义// 宏替换只是纯粹的文本替换,把左边的宏换成右边的东西,并不会进行任何运算// 参数和结构都必须用()包住#define PING_FANG(x) ((x)*(x))
- 预处理指令
不能递归包含: 自己包含自己,a.h include a.h
不能交叉包含:a.h incldue b.h, b.h include a.h
防止.h的文件内容被包含多次。用预处理命令。 文件名用A_H的方式来定义。
#ifndef 文件名 #define 文件名 ..文件内容.. #endif
- typedef 起别名
typedef int Myint
typedef char * String1
struct Person { int age;};// 给结构体类型起个别名 :Stutypedef struct Person Student;// 此结构类似与上面的内容。 是上面两行的缩写typedef struct Dog { int age} WangCai;
- 指针的使用范围
需要间接的修改某个变量的值。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。