C语言结构体
数据结构的定义经常用到
struct [标签名称] {
成员声明列表
}[变量名表列];
struct tag {
member-list
member-list
member-list
...
} variable-list ;
解释:
- 标识符 tag 是结构体标签。
- member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
- variable-list 结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。
- 在一般情况下,tag、member-list、variable-list 这 3 部分至少要出现 2 个。
- 结构类型的标签属于一个不同的命名空间:即使结构标签与变量名或函数名相同,编译器也仍然可以区分。类似地,对于每个结构类型,其中的每个结构成员名称都属于不同的命名空间。
情况1:
声明结构体变量a3
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//同时又声明了结构体变量a3
//这个结构体并没有标明其标签
struct
{
int a;
char b;
double c;
} a3;
情况2:
结构体的标签被命名A3,但没有声明变量
用A3标签的结构体,另外声明变量
//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c
//结构体的标签被命名为SIMPLE,没有声明变量
struct A3
{
int a;
char b;
double c;
};
//用A3标签的结构体,另外声明了变量a1、a2、a3
struct A3 a1, a2[20], *a3;
情况3(数据结构考试常用):
用typedef创建新类型A3
用A3作为类型声明新的结构体变量
//也可以用typedef创建新类型
typedef struct
{
int a;
char b;
double c;
} A3;
//现在可以用A3作为类型声明新的结构体变量
A3 a1, a2[20], *a3;
结构体变量的初始化
#include <stdio.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book = {"C ", "NOBLE", "CS", 666};
int main()
{
printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id);
}
访问结构成员
使用成员访问运算符(.)
下面举三个例子:
#include <stdio.h>
#include <string.h>
struct student
{
char name[50];
char age[50];
char class[100];
int sno;
};
int main( )
{
struct student student1; /* 声明 student1,类型为 student */
struct student student2; /* 声明 student2,类型为 student */
/* student1 详述 */
strcpy( student1.name, "XD");
strcpy( student1.age, "11");
strcpy( student1.class, "YIBAN");
student1.sno = 1;
/* student2 详述 */
strcpy( student2.name, "GEGE");
strcpy( student2.age, "12");
strcpy( student2.class, "ERBAN");
student2.sno = 2;
/* 输出 student1 信息 */
printf( "student1 name : %s\n", student1.name);
printf( "student1 age : %s\n", student1.age);
printf( "student1 class : %s\n", student1.class);
printf( "student1 sno : %d\n", student1.sno);
/* 输出 student2 信息 */
printf( "student2 name : %s\n", student2.name);
printf( "student2 age : %s\n", student2.age);
printf( "student2 class : %s\n", student2.class);
printf( "student2 sno : %d\n", student2.sno);
return 0;
}
#include <stdio.h>
#include <string.h>
struct student
{
char name[50];
char age[50];
char class[100];
int sno;
}student1,student2;
int main( )
{
/* student1 详述 */
strcpy( student1.name, "XD");
strcpy( student1.age, "11");
strcpy( student1.class, "YIBAN");
student1.sno = 1;
/* student2 详述 */
strcpy( student2.name, "GEGE");
strcpy( student2.age, "12");
strcpy( student2.class, "ERBAN");
student2.sno = 2;
/* 输出 student1 信息 */
printf( "student1 name : %s\n", student1.name);
printf( "student1 age : %s\n", student1.age);
printf( "student1 class : %s\n", student1.class);
printf( "student1 sno : %d\n", student1.sno);
/* 输出 student2 信息 */
printf( "student2 name : %s\n", student2.name);
printf( "student2 age : %s\n", student2.age);
printf( "student2 class : %s\n", student2.class);
printf( "student2 sno : %d\n", student2.sno);
return 0;
}
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[50];
char age[50];
char class[100];
int sno;
}student;
int main( )
{
student student1; /* 声明 student1,类型为 student */
/* student1 详述 */
strcpy( student1.name, "XD");
strcpy( student1.age, "11");
strcpy( student1.class, "YIBAN");
student1.sno = 1;
/* 输出 student1 信息 */
printf( "student1 name : %s\n", student1.name);
printf( "student1 age : %s\n", student1.age);
printf( "student1 class : %s\n", student1.class);
printf( "student1 sno : %d\n", student1.sno);
return 0;
}
注意每一个例子都是怎么声明的
ok,如果这三个例子能看懂,那么就没有问题了