C语言代码知识点零碎01

一. typedef

typedef A B
就是给A起一个外号叫B

C语言中可以直接使用int 定义一个变量,但是涉及到比如结构体,就需要用如下格式去声明和定义:
struct Book
{
};
在调用这个结构体时,需要用如下命令

struct BOOK book1;

就不能像Int一样方便。
当我们用typedef时,相当于给这个结构体起了个外号:

typedef struct Book
{
}EYES;

那么后面在需要调用这个结构体的时候,只需要:
EYES book1;

二.结构体

格式:
struct 结构体名
{
}结构体变量;
struct 结构体名 *ptr = 结构体变量名;

eg.

struct Book
{
}book1;
struct Book *ptr = &book1;

结构体名即类型名,定义一个指针指向该类型,其值为变量的地址。
结构体变量名与数组变量名不同,数组名本身可作为地址,结构体变量名不可,需要取址。

当需要指向结构体中的元素时
用p->name 即可。

三.函数

函数指针

函数名本身可以作为函数的地址,调用函数时,func() 和(*func)()均可。
a=函数(),则将函数返回的值赋予a。
定义完函数后,定义一个指向函数的指针。

int max(int *a,int *b)
{
}
int (*p)(int *a,int *b);
p=max;

参数传递

C语言参数传递分为两种:值传递和引用传递。值传递是将实参的值传递给形参,形参是实参的副本(可理解为另一块内存),在函数中修改形参不影响实参的值。引用传递是将实参的地址传递给形参,形参是实参的别名,在函数内部对形参的修改会影响实参的值。
说白了,就是如果是值传递,函数内部不管怎么修理形参,修理的都是实参之外的另外开辟的一块内存的值(我是这么理解的,实际是不是不确定,不过估计多半是)。如果是引用传递,就是虽然我形参是另外一片地区,但是你把地址给我了,我就能像操控提线木偶一样操控这个地址的值,所以就能通过这种方式改变你实参,哈哈哈哈哈!

函数地址

得到函数地址有两种方式:①func ;②&func
“因此,对于test和&test你应该这样理解,test是函数的首地址,它的类型是void (),&test表示一个指向函数test这个对象的地址,
它的类型是void (*)(),因此test和&test所代表的地址值是一样的,但类型不一样。test是一个函数,&test表达式的值是一个指针!” ----引用自网友

四.句柄

参考文章:https://www.cnblogs.com/zpcdbky/p/4652151.html
简言之,句柄类似指针,但其中所存放的值可以变化。句柄中存放的地址指向一片区域的首地址,在每一次线程更新…之类的可能这个句柄就不指向该区域了,指向别的区域,但句柄本身的位置不变。就是说需要用谁把谁的地址放在句柄里,好调用,效率高。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值