#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Dog {
char name[20];
int age;
char sex;
void (*eat)(void);
} Dog;
void eat() {
printf("狗狗在吃狗粮!\n");
}
定义完成后,再初始化;
void fun1() {
Dog dog;
strcpy(dog.name, "旺财");
dog.age = 5;
dog.sex = 'M';
dog.eat = eat;
printf("名字: %s, 年龄: %d, 性别: %c\n", dog.name, dog.age, dog.sex);
dog.eat();
}
定义的时候,初始化;
void fun2()
{
Dog dog = {"旺财", 5, 'M', eat};
strcpy(dog.name, "金宝");
printf("%s,%d,%c\n", dog.name, dog.age, dog.sex);
dog.eat();
}
int main() {
fun1();
fun2();
return 0;
}

这一种写法只是将结构体中的名字的数组改为了指针
/* 定义全局的结构体
struct Dog
{
char *name
int age
char sex
void (*eat)(void)
}
void eat()
{
printf("狗狗在吃狗粮!\n")
}
/**
* 方式1:先定义,再初始化
*/
void fun1()
{
// 定义结构体变量
struct Dog dog
// 给结构体变量成员赋值
dog.name = "旺财"
dog.age = 5
dog.sex = 'M'
dog.eat = eat
// 访问结构体变量成员
printf("%s,%d,%c\n", dog.name, dog.age, dog.sex)
// 访问成员方法(函数)
dog.eat()
}
/**
* 方式2:定义的同时初始化
*/
void fun2()
{
// 定义结构体变量的同时,给变量成员初始化
struct Dog dog = {"旺财", 5, 'M', eat}
// 修改成员的值(改变了指针的指向)
dog.name = "金宝"
// 访问结构体变量成员
printf("%s,%d,%c\n", dog.name, dog.age, dog.sex)
// 访问成员方法(函数)
dog.eat()
}
int main(int argc, char *argv[])
{
fun1()
fun2()
return 0
}