Android 音视频入门之C入门序列(八)- 结构体

Java里的对象对应C里的是结构体 关键字struct

定义结构体

// 方式一
struct Dog {
    // Java类里有成员,
    // 成员
    char name[10]; // 这个需要copy
    int age;
    char sex;
};
// 方式二
struct Person {
    char *name; // 这个可能直接赋值
    int age;
    char sex;
} ppp0,
        ppp = {"Derry", 33,'M'},
        ppp2 = {"Derry2", 323, 'M'};

int main () {
	// 结构体使用
	struct Dog dog;   // 这样写完,成员是没有初始化,成员默认值为系统值 这跟Java是不一样的
	// 方式一赋值
	strcpy(dog.name, "暗战风云");
	dog.age = 3;
	dog.sex = 'G';
	
	// 方式二赋值
	ppp0.name = "Printf";
	ppp0.age = 22;
	ppp0.sex = 'M';
    return 0;
}

结构体嵌套结构体,相当于Java类嵌套类

struct Study {
    char *studyContent;  // 学习内容
};

struct Student {
    char name[10];
    int age;
    char sex;
    struct Study study;
    struct Play {
        char *playContent;
    } wan;
};

int main () {
	// 创建赋值
	struct Student student =
	            {"李元霸", 88, 'G',
	             {"学习C"},
	             {"王者荣耀"}
	            };
	
	    printf("name :%s, age: %d, sex:%c, study:%s, wan:%s\n", student.name, student.age, student.sex,
	           student.study.studyContent, student.wan.playContent);
	}
    return 0;

结构体指针

struct Cat {
    char name[10];
    int age;
};

int main () {
	// 先定义一个结构体
	struct Cat cat = {"小花猫", 12};
	// 定义结构体指针  下面方式静态开辟 在栈区
	// VS写法, Cat * catp = &cat;
	struct Cat *cat_p = &cat; // Clion写法
	// 使用结构 体指针来改值
	cat_p->age = 3; //   -> 这个符号是调用一级指针成员


	// 动态开辟 堆区
	// VS写法 : Cat * cat2 = (Cat *)malloc(sizeof(Cat);
	struct Cat *cat2 = malloc(sizeof(struct Cat));// 差别是Clion需要加struct
	// 赋值
	strcpy(cat2->name, "小花猫堆区");
	cat2->age = 15;
    printf("Cat2 name: %s, age: %d\n", cat2->name, cat2->age);
    // 堆区记得释放
    free(cat2);
    cat2 = NULL;
    return 0;
}

结构体数组

定义结构体数据跟常规数组一样

struct Cat3 {
    char name[10];
    int age;
};

int main () {
	    // 栈区, 静态开辟
    struct Cat3 cat[10] = {
            {"1111", 1},
            {"222",  2},
            {"333",  3},
            {"444",  4},
	
	// 为数组的第9个赋值
	//    cat[9 ] =   {"9999", 1}  VS写法,  下面是clion写法
	struct Cat3 cat9 = {"9999", 9};
	cat[9] = cat9;
	// 还有一种写法
	*(cat + 9) = cat9; //  cat[9] = cat9; ===*(cat + 9) = cat9; 二个一样
	printf("Cat9 name: %s, age: %d\n", cat9.name, cat9.age);

	// 动态开辟 堆区
	struct Cat3 *cat2 = malloc(sizeof(struct Cat3) * 10);
	// 赋值  指针默认指向首元素地址
    strcpy(cat2->name, "小花猫");
    cat2->age = 123;
    printf("小花猫 name: %s, age: %d\n", cat2->name, cat2->age);
    free(cat2);
    cat2 = NULL;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值