一、结构体指针作为函数参数
指针数组
:一个普通数组,但其类型由元素类型决定,每一个元素是一个指针。数组指针:
指针函数:
是一个普通函数,但它的返回值是一个指针。函数指针:
是一个指向一个函数的指针,可以把这个指针作为参数传进去,调用者用这个指针可以调用对应的函数,.NET里的delegate应该是使用这种机制实现的。其实指针可以实现一些非常叼的功能,当年我就用一个指针数组,保存一些函数的指针,然后把这个数组的指针作为参数传到调用方,调用方可以方便地根据需要,选择数组中不同的指针对应的函数来进行调用,实现了灵活的函数数组,例如这实现一个遥控器功能的程序,把每个按钮的功能写成一个函数,然后的把这些函数的指针装入一个数组,根据数组的下标来调用不同的函实,实现不同的功能。这种做法也是挺美妙的。
不过成也指针,败也指针,事物必然有两面性的,指针的强大,令C程序员牛逼起来,但如果管理得不好,也会很惨的。如上面提出的数组指针,通过确定首元素地址+偏移量来访问元素,若你把这个偏移量搞错了,访问了这个数组以外的地址空间,后果可以是很糟糕的,例如我设计过一个视频监控程序的控制协议,其实就是传一堆结构体过去,然后根据预先的约定,来分解哪一个位置的第几位表示什么操作,我们在很多次使用这个协议的时候,偏移量算错了,改写了错误的位置的值,程序没有出现错误,可产生了错误的控制效果,这比程序崩溃更糟糕,后者还比较容易发现,前者是产生一些错误的效果,更难排查。
二、C++ 结构体定义中指向自身类型的指针应该怎么理解
有下面两种方式:
1、structs{charc;inti;};struct*p1;/*p1是指向s结构体的指针*/
2、typedefstruct{charc;inti;}s,*ps;s*p2;/*p2是指向结构体的指针*/psp3;/*p3是指向s结构体的指针*/
三、结构体变量和结构体指针有什么区别
1、针对的数据类型不同:
结构体指针:结构体指针对变量。
结构体中的指针:结构体中的指针指成员。
2、针对的含义不同:
结构体指针:指向结构体类型的指针。
结构体中的指针:指成员指针。
3、用法不同:
结构体指针:
structA{inta;flaotb;};structAm,*p=&m;
p就是structA类型的结构体指针,指向了同类型的结构体变量m。
结构体中的指针:
structB
{inta;float*b;structB*next;};structBm,n;floatbb=1.1;m.b=&bb;m.next=&n;
b成员是指float类型的指针,next成员是指structB类型的指针。
四、定义一个结构体指针变量
1、结构体指针的定义:structnode{intp;charnode;charaddr[30];}a,*b;2、结构体指针的使用:b=&a;a.p与(*b).p与p->num是相同的意思。a.node与(*b).node与p->node是相同的意思。a.addr与(*b).addr与p->addr是相同的意思。3、注意事项:(1)、结构体指针必须指向一个确定的结构体变量,如:p=&a;(2)、通过结构体变量的指针访问结构体的方法为:a.num、(*p).num、p->num。
好了,文章到这里就结束啦,如果本次分享的结构体指针定义和结构体指针定义及赋值方法问题对您有所帮助,还望关注下本站哦!