结构体学习笔记5——指针成员与函数成员

介绍结构体其他类型的成员,有指针成员,函数成员,结构体成员(结构体嵌套)。

指针成员:

指针成员就是函数体内有一个成员是 指针。

#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\n", st.p[1], st.p[3]);
    system("pause");
    return 0;
}

函数成员:

在结构体中定义一个函数?可以吗

#include <stdio.h>
#include <stdlib.h>
struct Stu {
    void fun()
    {
        printf("i am bing    \n");    
    }
};

所以结构体中不能写函数。c++中 结构体内是可以写函数的,c中不允许。

如何让结构体包含一个函数??

可以在结构体内写一个函数指针。

#include <stdio.h>
#include <stdlib.h>
void fun(void)
{
    printf("i am bing    \n");
}
struct Stu {
    //定义一个函数指针, 这个函数指针是什么类型的? 是fun 函数类型——无返回值,无参数 所以是void(*)();
    void(*p)() ;//p就是一个指向函数的指针,
};
int main(void)
{
    struct Stu st = { fun };//函数名就是函数的地址,对函数名取地址也一样  
    (st.p)();


    system("pause");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/dabing0983/p/10539480.html
今日推荐