004-C语言结构体struct

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

// 第一种结构体类型
// 定义结构体
struct Man {
    // 成员
    char name[20];
    char* hair;
    int age;
    // 函数指针a
    int (*func_a)();
    // 函数指针b
    void*(*func_b)();
};

int doFunctionA() {
    printf("doFunctionA...\n");
    return 1;
}

// void* 代表着可以任意类型
void* doFunctionB(){
    printf("doFunctionB...\n");
    return 0;
}

// 第二种结构体类型
// 结构体变量
struct Woman {
    char* name;
    int age;
} w1 = { "Lily", 21 }, w2 = { "Rose", 20 };

// 第三种结构体类型
// 匿名结构体 没有结构体名称 主要用于控制结构体变量的个数,类似Java中的单例
struct {
    char *name;
    int age;
} student;

int main() {
    printf("Hello World!\n");
    // 结构体和文件
    // 结构体相当于Java中的Object 但是它又有C中独特的特性,
    // 很多时候我们看jni.h相关的代码或者额WebRTC,会看到Google程序员
    // 会利用C结构体来模式实现Java  OOP编程的风格,是代码更加清晰,一度和维护。
    // 把不同 数据类型的数据整合起来成为一个自定义的数据类型

    // 初始化结构体的变量
    // 1. 第一种初始化方式
    struct Man man = { "Jack", "yellow", 26};
    printf("man %s %s  %d\n", man.name, man.hair, man.age);

    //2. 申明完成之后, 自己复制
    struct Man man1;
    strcpy(man1.name, "Tom");
    //man1.name = "Tom"; // name 是char数组,所以不能直接赋值,只能使用strcpy的方式
    man1.hair = "brown";
    man1.age = 30;
    man1.func_a = doFunctionA;
    man1.func_b = doFunctionB;
    printf("man1 %s %s %d %d\n", man1.name, man1.hair, man1.age, man1.func_a());
    man1.func_b();

    // 结构体的变量和使用
    printf("w1.name %s w1.age %d\n", w1.name, w1.age);
    printf("w2.name %s w2.age %d\n", w2.name, w2.age);

    w1.name = "Lucy";
    w1.age = 10;
    printf("w1.name %s w1.age %d\n", w1.name, w1.age);

    student.name = "zhangSan";
    student.age = 8;
    printf("student name is %s age is %d", student.name, student.age);
}

输出如下:

Hello World!
man Jack yellow  26
doFunctionA...
man1 Tom brown 30 1
doFunctionB...
w1.name Lily w1.age 21
w2.name Rose w2.age 20
w1.name Lucy w1.age 10
student name is zhangSan age is 8

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值