介绍结构体其他类型的成员,有指针成员,函数成员,结构体成员(结构体嵌套)。
指针成员:
指针成员就是函数体内有一个成员是 指针。
#include <stdio.h> #include <stdlib.h> struct Stu { int * p; }; int main(void) { int a[5] = { 1,2,3,4,5 }; //struct Stu st = {NULL};// 给指针初始化,有几种形式:1.初始化为NULL ,就防止是野指针了。2.初始化为一个合法的地址,合法的地址有两种,一种是栈区的地址,第二种是堆区的地址 //初始化为NULL 的话,指针就不能使用了,在使用之前会判断指针是否为空,不能使用就没什么意义,要对其进行赋值。 //如何对一个指针赋值呢?或者说让它指向一个合法的空间? //st.p=(int *)malloc(8);//调用指针中的成员都是这样调法,然后让st.p malloc 一段空间,所以把指针初始化为NULL 了,在使用的时候一定要给空间/指向一个空间 struct Stu st = { a }; printf("%d,%d ", st.p[1], st.p[3]); system("pause"); return 0; }
函数成员:
在结构体中定义一个函数?可以吗
#include <stdio.h> #include <stdlib.h> struct Stu { void fun() { printf("i am bing "); } };
所以结构体中不能写函数。c++中 结构体内是可以写函数的,c中不允许。
如何让结构体包含一个函数??
可以在结构体内写一个函数指针。
#include <stdio.h> #include <stdlib.h> void fun(void) { printf("i am bing "); } struct Stu { //定义一个函数指针, 这个函数指针是什么类型的? 是fun 函数类型——无返回值,无参数 所以是void(*)(); void(*p)() ;//p就是一个指向函数的指针, }; int main(void) { struct Stu st = { fun };//函数名就是函数的地址,对函数名取地址也一样 (st.p)(); system("pause"); return 0; }