2024.1.2C语言 结构

发布时间:2024年01月02日

一.结构的定义

1.概念

在C语言中,结构是一种用户自定义的数据类型,它允许您将多个不同类型的数据组合成一个单一的数据类型,如

struct student {
	int num;//学号
	char name[10];//姓名
	int computer, english, math;//3门课程成绩
	double average;//个人平均成绩
};//一定一定要记得加;

包含多种数据类型,可看出结构是C语言中一种新的构造数据类型,它能把有内在联系的不同数据类型汇聚成一个整体,使他们相互关联;同时,结构又是一个变量的集合,可以对其成员单独操作(同基本数据类型操作).

2.定义

struct? 结构名{//结构类型名

? ? ? ? 类型名 结构成员名1;

? ? ? ? 类型名 结构成员名2;//结构分量

? ? ? ? ? ? ? ? ? ? ? ? ...

? ? ? ? 类型名 结构成员名n;

};//看做一条语句,结束要加;

struct为关键字,后自行命名一个结构名(合法标识符)

3.结构的嵌套定义

一个大的实体包含多个成员,每个成员又可能包含更小的成员,这样就需要结构的嵌套

struct address {//定义地址结构
	char city[10];
	char street[20];
	int code;
	int zip;
};
struct student {
	int num;
	char name[10];
	struct address addr;//定义通信地址成员
	int computer, english, math;
	double average;
};

结构类型 struct student的成员变量addr被定义成结构类型struct address,而struct address又包含了4个成员,即一个结构的成员被定义成了另一个结构类型.

二.结构变量的定义和初始化

同基本数据类型一样,需要定义结构类型的变量才能使用.

如:struct student stu,max;定义了结构变量 stu,max;数据类型都为struct student

?1.定义
(1)单独定义

先定义一个结构类型,在定义这种类型的变量

struct Student {  
    char name[50];  
    int age;  
    float score;  
};  
  
struct Student s1, s2;
(2)混过定义

定义结构类型的同时定义结构变量

struct Student {  
    char name[50];  
    int age;  
    float score;  
} s1, s2;
2.结构变量的使用

利用结构成员操作符"."来引用结构成员

结构变量名.结构成员名,如stu.num? stu.name

在C语言中,对结构成员的使用方法与同类型的变量完全相同

如:stu.num=100;strcpy(stu.name,"zhang");

对嵌套结构成员的引用方法和一般成员的引用方法类似

#include <stdio.h>  
  
struct Inner {  
    int inner_data;  
};  
  
struct OuterStruct {  
    int outer_data;  
    struct Inner inner; // 定义嵌套结构成员  并给被嵌套的结构命名为 inner
};  
  
int main() {  
    struct OuterStruct outer;  //给这个嵌套结构命名为outer
    outer.outer_data = 10;  //对结构outer中的outer_data用.操作
    outer.inner.inner_data = 20;  //对结构outer中的结构inner操作,故用两次.
  
    printf("outer_data: %d\n", outer.outer_data);  
    printf("inner_data: %d\n", outer.inner.inner_data);  
  
    return 0;  
}
3.结构变量的整体赋值

如果两个结构变量具有相同的类型,则允许将一个结构变量的值直接赋给另一个.赋值时一一对应.

文章来源:https://blog.csdn.net/lanssssss/article/details/135338052
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。