【C语言】初步认识结构体

简介: 【C语言】初步认识结构体

1.结构体诞生的由来

C语言已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学生,描述⼀本书,这时单一的内置类型是不行的。描述⼀个学生需要名字、年龄、学号、身高、体重等;描述⼀本书需要作者、出版社、定价等。C语言为了解决这个问题,增加了结构体这种自定义的数据类型,让程序员可以自己创造适合的类型。

结构是一些值的集合,这些值称为成员变量结构的每个成员可以是不同类型的变量,如:

标量、数组、指针,甚至是其他结构体。

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

//代码1:变量的定义
struct Point
{
  int x;
  int y;//x,y是成员变量
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2
 
//代码2:初始化。
struct Point p3 = { 10, 20 };
struct Stu //类型声明
{
  char name[15]; //名字
  int age; //年龄
};
struct Stu s1 = { "zhangsan", 20 }; //初始化
struct Stu s2 = { .age = 20, .name = "lisi" }; //指定顺序初始化
 
//代码3
struct Node
{
  int data;
  struct Point p;
  struct Node* next;
}n1 = { 10, {4,5}, NULL }; //结构体嵌套初始化
struct Node n2 = { 20, {5, 6}, NULL }; //结构体嵌套初始化

3.结构体成员的直接访问

结构体成员的直接访问是通过点操作符(.)访问的。点操作符接受两个操作数

使用方式:结构体变量.成员名

如:

#include <stdio.h>
struct Point
{
  int x;
  int y;
}p = { 1,2 };
int main()
{
  printf("x: %d y: %d\n", p.x, p.y);
  return 0;
}

4.结构成员的间接访问

有时候我们得到的不是一个结构体变量,而是得到了一个指向结构体的指针。

使用方式:结构体指针->成员名

如下所示:

#include <stdio.h>
struct Point
{
  int x;
  int y;
};
int main()
{
  struct Point p = { 3, 4 };
  struct Point* ptr = &p;
  ptr->x = 10;
  ptr->y = 20;
  printf("x = %d y = %d\n", ptr->x, ptr->y);
  return 0;
}

综合举例:

#include <stdio.h>
#include <string.h>
struct Stu
{
  char name[15]; //名字
  int age; //年龄
};
void print_stu(struct Stu s)
{
  printf("%s %d\n", s.name, s.age);
}
void set_stu(struct Stu* ps)
{
  strcpy(ps->name, "李四");
  ps->age = 28;
}
int main()
{
  struct Stu s = { "张三", 20 };
  print_stu(s);
  set_stu(&s);
  print_stu(s);
  return 0;
}

只有一点小小归纳,希望能帮到大家!

如果大家发现知识点错误的话,请帮忙指出,十分感谢!!

也请大家帮忙点赞、评论,这将督促我前行,大家一起加油!!!


目录
相关文章
|
5天前
|
存储 C语言
C语言------结构体和共用体
这篇文章是关于C语言中结构体和共用体的实训,通过示例代码演示了结构体的定义、赋值、使用,以及如何使用结构体变量进行数据的组织和操作,包括输入、排序、求平均分和查找学生信息等功能。
C语言------结构体和共用体
|
2月前
|
编译器 测试技术 C语言
【C语言】:自定义类型:结构体的使用及其内存对齐
【C语言】:自定义类型:结构体的使用及其内存对齐
41 7
|
2月前
|
网络协议 编译器 Linux
结构体(C语言)
结构体(C语言)
|
2月前
|
算法 Java 程序员
面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性
【6月更文挑战第15天】面向对象编程(OOP)通过对象组合构建软件,C语言虽是过程式语言,但可通过结构体、函数指针模拟OOP特性。封装可使用结构体封装数据和方法,如模拟矩形对象。继承则通过结构体嵌套实现静态继承。多态可通过函数指针模拟,但C不支持虚函数表,实现复杂。C语言能体现OOP思想,但不如C++、Java等语言原生支持。
43 7
|
1月前
|
存储 编译器 定位技术
结构体数组在C语言中的应用与优化策略
结构体数组在C语言中的应用与优化策略
|
2月前
|
编译器 C语言
【C语言基础】:自定义类型(一)--> 结构体-2
【C语言基础】:自定义类型(一)--> 结构体
|
2月前
|
编译器 Linux C语言
【C语言基础】:自定义类型(一)--> 结构体-1
【C语言基础】:自定义类型(一)--> 结构体
|
1月前
|
存储 编译器 数据库
结构体数组在C语言中的应用与优化技巧
结构体数组在C语言中的应用与优化技巧
|
2月前
|
C语言
C语言学习记录——枚举(定义、与结构体的区别、优点)
C语言学习记录——枚举(定义、与结构体的区别、优点)
29 3
|
2月前
|
存储 编译器 C语言
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
C语言学习记录——结构体(声明、初始化、自引用、内存对齐、结构体设计、修改默认对齐数、结构体传参)一
35 2