#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