struct结构体的用法

什么是结构体?

在C语言中,结构体是一种自定义的数据结构,允许程序员将不同的数据类型组成在一起,形成一个新的数据类型。

作用

多个相关数据的整合,使得代码数据逻辑更清晰

了解面向对象编程(java、python、c++等都是面向对象的编程语言)的程序员就知道,这个就可以看作是创建对象。

struct point{
   int x;  //x坐标
   int y;  //y坐标
}

也可以更好得整合复杂的数据结构(如链表、队列、树等)

使用

声明/定义/取别名

/* 1. 声明结构体;编译器知道这是一个未定义的类型,
同时也告诉编译器在后面的代码中有定义,
而不至于在编译的时候报未知类型的错误。*/
struct point;

/* 2. 引入别名,但类型本身仍未完整定义(包含声明);
别名即:point_t 等同于 struct point。 */
typedef struct point point_t;

struct point {
    int x;
    int y;
}; // 3. 完整定义结构体类型(定义本身包括声明)。

创建结构体变量并赋值

//用结构体类型原名
struct point p1;
p1.x = 10;
p1.y = 20;

//用别名
point_t p2;
p2.x = 10;
p2.y = 20;

//创建结构体时初始化结构体
struct point p1 = {10, 20};
point_t p2 = {10, 20};

//创建结构体指针,并赋值
struct point* p3;
p3->x = 10;
p3->y = 20;

使用实例

实例说明:

  • 创建两个结构体(girl 和 boy),并通过相互之间的关系进行相互关联
    在这里插入图片描述

代码如下:

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

int main()
{
	struct girl{
		char *name;
		struct boy* boy_friend;
	};
	
	struct boy{
		char *name;
		struct girl* girl_friend;
	};
	
	struct girl* xiaoHong = (struct girl *)malloc(sizeof(struct girl));
	xiaoHong->name = (char *)malloc(sizeof(char) * 10);
	strcpy(xiaoHong->name, "xiaohong");
	printf("%s\n",xiaoHong->name);
	
	struct boy* xiaoMing = (struct boy *)malloc(sizeof(struct boy));
	xiaoMing->name = (char *)malloc(sizeof(char) * 10);
	strcpy(xiaoMing->name, "xiaoming");
	printf("%s\n",xiaoMing->name);
	
	xiaoHong->boy_friend = xiaoMing;
	xiaoMing->girl_friend = xiaoHong;
	
	// 验证互相引用是否正常
    printf("xiaoHong's boy_friendfriend's name: %s\n", xiaoHong->boy_friend->name);
    printf("xiaoMing's girl_friendfriend's name: %s\n", xiaoMing->girl_friend->name);
    
    printf("xiaoHong's boy_friendfriend's girl_friendfriend's name: %s\n", xiaoHong->boy_friend->girl_friend->name);
    printf("xiaoMing's girl_friendfriend's boy_friendfriend's name: %s\n", xiaoMing->girl_friend->boy_friend->name);
	
   // 释放内存
    free(xiaoHong->name);
    free(xiaoMing->name);
    free(xiaoHong);
    free(xiaoMing);

   return 0;
}

运行结果如下:

xiaohong
xiaoming
xiaoHong's boy_friendfriend's name: xiaoming
xiaoMing's girl_friendfriend's name: xiaohong
xiaoHong's boy_friendfriend's girl_friendfriend's name: xiaohong
xiaoMing's girl_friendfriend's boy_friendfriend's name: xiaoming
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值