【精通C语言】---结构体

简介: 【精通C语言】---结构体

🎉结构体🎉


C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。


🎉定义结构🎉


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


struct tag { 
    member-list
    member-list 
    member-list  
    ...
} variable-list ;


tag 是结构体标签。


member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。


variable-list 结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。


例学生类:


#define _CRT_SECURE_NO_WARNINGS 1
# include<stdio.h>
//描述一个学生类数据
//姓名
//年龄
//电话
//性别
//struct 结构体关键字  stu - 结构体标签  struct Stu- -结构体类型
//struct studnet
//{
//  char name[20];
//  short age;
//  char tele[12];
//  char sex[5];
//
//}s1,s2,s3;//三个是三个全局变量
 typedef struct Stu //类型重定义
{
  char name[20];
  short age;
  char tele[12];
  char sex[5];
}Stu;
int main()
{
  struct Stu s1;
  Stu s2;
  return 0;
}


🎉结构体变量的初始化🎉


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


举例:


#include <stdio.h>
struct Books
{
  char  title[50];
  char  author[50];
  char  subject[100];
  int   book_id;
} book = { "C 语言", "RUNOOB", "编程语言", 123456 };
int main()
{
  printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id);
}


控制台输出:



🎉访问结构成员🎉

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

成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。您可以使用 struct 关键字来定义结构类型的变量。


下面的实例演示了结构的用法:


#include <stdio.h>
typedef struct Stu
{
  char name[20];
  short age;
  char id[12];
}Stu;
int main()
{
  Stu s1 = { "张三",20,"15999998888"};//局部变量
  Stu s2 = { "李四",35,"15588887777"};
  printf("年龄: %s\n", s1.name);
  printf("年龄 :%d\n", s1.age);
  printf("学号 :%d\n", s1.id);
  printf("姓名 : %s\n", s2.name);
  printf("年龄 :%d\n", s2.age);
  printf("学号 :%d\n", s2.id);
  return 0;
}



🎉指向结构的指针🎉


您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:


struct Books *struct_pointer;


现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:


struct_pointer = &Book1;


为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:


struct_pointer->title;
#include <stdio.h>
#include <string.h>
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
/* 函数声明 */
void printBook( struct Books *book );
int main( )
{
   struct Books Book1;        /* 声明 Book1,类型为 Books */
   struct Books Book2;        /* 声明 Book2,类型为 Books */
   /* Book1 详述 */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;
   /* Book2 详述 */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;
   /* 通过传 Book1 的地址来输出 Book1 信息 */
   printBook( &Book1 );
   /* 通过传 Book2 的地址来输出 Book2 信息 */
   printBook( &Book2 );
   return 0;
}
void printBook( struct Books *book )
{
   printf( "Book title : %s\n", book->title);
   printf( "Book author : %s\n", book->author);
   printf( "Book subject : %s\n", book->subject);
   printf( "Book book_id : %d\n", book->book_id);
}


控制台输出:


Book title : C Programming

Book author : Nuha Ali

Book subject : C Programming Tutorial

Book book_id : 6495407

Book title : Telecom Billing

Book author : Zara Ali

Book subject : Telecom Billing Tutorial

Book book_id : 6495700


目录
相关文章
|
2月前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
62 10
|
2月前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
2月前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
2月前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
2月前
|
编译器 C语言 C++
C语言结构体
C语言结构体
29 5
|
2月前
|
C语言
C语言结构体链式结构之有头单链表
文章提供了一个C语言实现的有头单链表的完整代码,包括创建链表、插入、删除和打印等基本操作。
32 1
|
2月前
|
C语言
初识C语言6——结构体
初识C语言6——结构体
19 3
|
2月前
|
存储 编译器 C语言
【C语言】探索结构体基础知识:简明概要
【C语言】探索结构体基础知识:简明概要
|
2月前
|
编译器 Linux C语言
C语言 之 结构体超详细总结
C语言 之 结构体超详细总结
22 0
|
2月前
|
存储 编译器 Linux
深入C语言:探索结构体的奥秘
深入C语言:探索结构体的奥秘