C 结构体

结构是 C 编程中另一种用户自定义的可用的数据类型,用来存储不同类型的数据项。

定义结构

使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct tag { 
    int a;
    float b;
    char c;
    ...
} var;

tag 是结构体标签。
大括号内是变量定义。
var结构变量,定义在结构的末尾,最后一个分号之前。

在一般情况下,tag、变量定义、var 这 3 部分至少要出现 2 个。以下为实例:

//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//同时又声明了结构体变量s1
//这个结构体并没有标明其标签
struct 
{
    int a;
    char b;
    double c;
} s1;
 
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//结构体的标签被命名为Tag,没有声明变量
struct TAG
{
    int a;
    char b;
    double c;
};
//用TAG标签的结构体,另外声明了变量t1、t2、t3
struct TAG t1, t2[20], *t3;
 
//也可以用typedef创建新类型
typedef struct
{
    int a;
    char b;
    double c; 
} Tag2;
//现在可以用Tag2作为类型声明新的结构体变量
Tag2 u1, u2[20], *u3;

在上面的声明中,第一个和第二声明被编译器当作两个完全不同的类型,即使他们的成员列表是一样的,如果令 t3=&s1,则是非法的。

//此结构体的声明包含了其他的结构体
struct COMPLEX
{
    char string[100];
    struct TAG a;
};
 
//此结构体的声明包含了指向自己类型的指针
struct NODE
{
    char string[100];
    struct NODE *next_node;
};

如果两个结构体互相包含,则需要对其中一个结构体进行不完整声明

struct B;    //对结构体B进行不完整声明
 
//结构体A中包含指向结构体B的指针
struct A
{
    struct B *partner;
    //other members;
};
 
//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
struct B
{
    struct A *partner;
    //other members;
};

结构体变量的初始化

和其它类型变量一样,对结构体变量可以在定义时指定初始值。

#include <stdio.h>
 
struct Person
{
   char name[10];
   int age;
   char sex[1];
} man= {"hhh", 20, "m"};
 
int main()
{
    printf("name: %s\nage: %d\nsex: %s\n", man.name, man.age, man.sex);
}

访问结构成员

为了访问结构的成员,使用成员访问运算符(.)。

#include <stdio.h>
#include"string.h"
struct Person
{
   char name[10];
   int age;
   char sex[5];
};
 
int main()
{
	struct Person man;
	struct Person woman;
	strcpy(man.name, "xm");
	strcpy(man.sex, "man");
	man.age = 20;
	strcpy(woman.name, "xh");
	strcpy(woman.sex, "woman");
	woman.age = 21;
	printf("name: %s\nage: %d\nsex: %s\n", man.name, man.age, man.sex);
	printf("name: %s\nage: %d\nsex: %s\n", woman.name, woman.age, woman.sex);
}
发布了49 篇原创文章 · 获赞 6 · 访问量 5045

猜你喜欢

转载自blog.csdn.net/qq_43959027/article/details/89604836