首页 > 其他分享 >C语言零基础入门-结构体-01

C语言零基础入门-结构体-01

时间:2022-10-18 16:05:11浏览次数:68  
标签:01 入门 int age 数据类型 C语言 stu1 Student 结构

C语言零基础入门-结构体-01

这节课的主要内容:

1,什么是结构体。

2,结构体的定义以及使用。



1. 什么是结构体

这个问题就变得有意思了,为什么呢?因为他可以与我们之前的学习紧密相关了。

在前面我们学习过许许多多的数据类型大家应该还记得吧,比如:int整形,char字符型,float浮点类型等等。

学习的时候我解释过什么是数据类型。数据类型就是:数据+数据可以执行的操作。

举个例子

  • 对于int类型的数据,他的数据必须是整数,整数上的操作有加减乘除等等。
  • 比如char类型,他的数据是字符,字符上的操作就有大小写转换等等操作。

所以,什么是结构体呢???

1.1 结构体

结构体其实也是一个数据类型,但是这个数据类型是我们自己定义的,并且是将基础数据类型混合形成的复杂数据类型。

于是就产生了两个问题:

  • 什么是基础数据类型:基础数据类型就是一些不可再分的数据类型,比如之前学到的int,char,float等等都是基础数据类型,他们都是不可再分的。(举一个简单的例子,数据中0~9这10个数就是基础数据,他们都是不可再分的数据类型)。
  • 什么是复杂数据类型:复杂数据类型就好比是将基础数据类型进行组合,从而形成的一个新的数据类型,但是这个数据类型是可以细分的,细分之后你会发现他里边的元素就是基础数据类型。(比如,一个数字101就是一个复杂数据,他可以细分为1,0,1三个基础数据)。

一般定义的解释都是很枯燥的,所以我们来举一个例子吧。

1.1.1 基础数据类型​



int a = 7;
char flag = 'A';


基础数据类型就是不可再分的数据类型,看上边的int,char两个数据类型是不是都不可再分了吖,所以他们都是基础数据类型。

其实在数据中只有两种数据类型:基础 和 复杂,我们之前所学的数据类型都是基础数据类型。

1.1.2 复杂数据类型

我们有一个学生的数据表,每一个学生作为一个独立的个体肯定都有着自己许多的信息,比如:姓名,性别,年龄,学号等等。

这个时候我们就在想,我们是不是可以自己定义一个数据类型,叫做Student呢?

答案是当然可以,就比如下边这样:

结构体的图示

C语言零基础入门-结构体-01_基础数据类型

C语言零基础入门-结构体-01_基础数据类型_02

  • 于是我们就定义了一个新的数据类型,这个数据类型名字叫做Student,这个时候Student就和int类型差不多,都可以使用他来定义一个个的变量了。
结构体的使用


Student
  • 使用​​Student stu;​​ 就定义出了一个Student类型的数据变量​​stu​​。(就好像使用 int a就定义出了一个整形变量a是一样的道理。)
  • 对于Student类型的stu,我们可以怎么赋值呢?当然是按照定义数据类型Student时,使用的基础数据类型进行赋值了。(具体赋值原理先不讲,因为现在还没讲语法呢。)

1.2 结构体语法

1.2.1 结构体的定义

1.2.1.1 基础定义

上边说了,结构体的定义其实就是定义了一个新的数据类型,这个数据类型是使用基础数据类型组合形成的。所以语法如下:

语法:




struct Student{ 
这里放上这个结构体用到的基础数据类型
;};
  • struct是结构体定义的语法。
  • Student是这个结构体的名字。

例子:


int a = 7;
char flag = 'A';
  • 定义了一个名字为Student的结构体。
  • Student结构体里边有四个基础数据类型,是name、id、gender、age。分别对应的含义是姓名、学号、性别、年龄。

定义的完整代码:


#include <stdio.h>

struct Student{
char name[30];
int id;
int gender;
int age;
}; // 分号别少了

void main(){

}
  • 需要注意的是,结构体是放在main函数外边的。
  • 不要少了分号。

但是,经过上述的定义之后,要怎么使用呢?

其实最笨的使用方式就是要把结构体的完整定义都带上来用,如下所示:


#include <stdio.h>

struct Student{
char name[30];
int id;
int gender;
int age;
};

void main(){
struct Student stu = {"Zhang",1001,1,23};
}
  • 要把完整的定义语法作为一个定义语句,比如:​​struct Student stu​​。

但是每次都带着struct是不是很麻烦啊。

1.2.1.2 起别名

这个时候就要引入一个思想,我们把自定义的数据类型(结构体)起一个别名好不好。

示例:


typedef struct Student{
char name[30];
int id;
int gender;
int age;
}Stu;
  • 这里的typedef就是起别名的语法。
  • 所以这里的意思就是,我们将结构体


struct Student{
char name[30];
int id;
int gender;
int age;
}

起了一个别名叫做 Stu,于是就可以直接使用Stu来定义变量了吖。

例子:



#include <stdio.h>

typedef struct Student{
char name[30];
int id;
int gender;
int age;
}Stu;

void main(){
Stu stu = {"Zhang",1001,1,23};
}
  • 自定义了一个数据类型Student,并且给这个变量起了一个别名叫做Stu。
  • 使用数据类型Stu定义出了一个变量stu存放的信息是一个学生的姓名、学号、性别、年龄信息。
  • 于是在定义的时候直接可以进行赋值了。

1.2.2 结构体的使用

既然我们定义出的数据类型可以存放信息,那么我们当然也可以访问、修改这些信息。

要怎么操作结构体的数据呢?

1.2.2.1 结构体的操作原理

首先我们要明确一点,我们的真实数据是结构体变量中的属性值,所以操作的时候我们操作的应该是结构体变量中的属性的内容,而不是结构体变量。蒙B了吧,哈哈哈哈,看下边的解释吧。

C语言零基础入门-结构体-01_基础数据类型

C语言零基础入门-结构体-01_基础数据类型_04

  • 首先,定义出了一个结构体变量stu1,(其实就是用自定义数据类型Stu定义出了一个Stu类型的数据变量而已。)
  • 此时结构体变量stu1有4个属性,分别是name,id,gender,age。并且他们都被赋予了初始值。
  • 此时stu1就相当于是一个用户的信息了,如果这个人年龄增加了,我们是不是应该将他的age进行修改吖。
  • 这个时候,我们操作的应该是结构体变量stu1里边属性age的值,而不是结构体变量stu1。
1.2.2.2 结构体变量的使用

所以,有一个新的操作符号引入,就是单纯的一个 ​​.​​ 来操作属性。

例子:


stu1.age = 25;
  • 这样就可以修改了。具体演示代码如下

代码:


#include <stdio.h>
#include <string.h>

typedef struct Student{
char name[30];
int id;
int gender;
int age;
}Stu;

void main(){

Stu stu1 = {"Zhang",1001,1,22};

printf("原始数据:\n");
printf("%s\n",stu1.name);
printf("%d\n",stu1.id);
printf("%d\n",stu1.gender);
printf("%d\n",stu1.age);

// 修改数据
strcpy(stu1.name,"Wang");
stu1.id = 1202;
stu1.gender = 0;
stu1.age = 55;

printf("修改之后的数据:\n");
printf("%s\n",stu1.name);
printf("%d\n",stu1.id);
printf("%d\n",stu1.gender);
printf("%d\n",stu1.age);
}


输出结果

C语言零基础入门-结构体-01_基础数据类型

C语言零基础入门-结构体-01_基础数据类型_06

解释:

  • 刚才说过使用 “点” 就可以访问结构体变量中的属性值了,所以代码中的点大家应该知道是访问属性的意思了吧。
  • 首先,使用自定义数据类型Stu定义了一个变量stu1并且顺便赋予了初始值。
  • 然后,使用 ​​变量名.属性名​​ 得到属性的值,并且输出。
  • 紧接着修改数据,其他的一些字段都还好,直接使用 ​​变量名.属性名​​ 得到属性名,然后重新赋值即可,但是这里需要注意name的修改需要使用字符串的拷贝函数。
  • 因为本身name是一个char类型的数组,然而我们即将放入的值"Wang"是一个字符串,所以字符与字符串类型不匹配,因此直接通过字符串的拷贝函数,将"Wang"拷贝进入字符数组即可。
  • 最后,还是同样的方式,使用 ​​变量名.属性名​​ 得到属性的值,并且输出。

2. 结束

下一节讲一些结构体的高级用法。


C语言零基础入门-结构体-01_数据_07


标签:01,入门,int,age,数据类型,C语言,stu1,Student,结构
From: https://blog.51cto.com/xiaoxiaojieya/5766896

相关文章

  • C语言零基础入门-06-习题
    C语言零基础入门-06-习题本节课的任务是: 布置5道指针的习题。习题01给定的5个整数(9,7,5,6,2),书写子函数进行排序,按照由小较大的顺序输出。要求:子函数之间数据传递使用指针进行。......
  • C语言零基础入门-指针-03
    C语言零基础入门-指针-03本节要点:1,指针操作int类型数据。2,指针操作float,char类型数据。01.指针操作int类型数据其实这一小节主要是带大家回顾一下,因为前边我们已经讲了很多......
  • C语言零基础入门-指针-04
    C语言零基础入门-指针-04本节要点:1,指向一维数组的指针。2,指向二维数组的指针。3,指针的输出练习。01.指向一维数组的指针有意思的来了,指针指向数组的情况非常常见,同样也是一......
  • Windows Server 2012 搭建Ftp服务器
    WindowsServer2012搭建Ftp服务器一、介绍FTP全称是FileTransferProtocol的简称,是一种文件传输协议。它使用TCP进行传输,客户和服务器建立连接前需要进行一个"三次握手......
  • 关于51单片机C语言中的data,idata,xdata,pdata,code
    转自:​​http://www.baobaoshequ.com/article/4584​​从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类......
  • #yyds干货盘点# 面试必刷TOP101:最小覆盖子串
    1.简述:描述给出两个字符串s 和t,要求在s 中找出最短的包含t 中所有字符的连续子串。数据范围:,保证s和t字符串中仅包含大小写英文字母要求:进阶:空间复杂度  ,时间复杂......
  • C语言结构体的声明
    结构体声明的几种方式1.先声明结构体类型,再定义结构体变量structBook{};/结构体变量定义/structBookbook1;//book1为结构体变量。2.声明结构体类型,同时定义结......
  • #yyds干货盘点# 面试必刷TOP101:反转字符串
    1.简述:描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)数据范围: 要求:空间复杂度 ,时间复杂度 示例1输入:"abcd"返回值:"dcba"示例2输......
  • #yyds干货盘点# 面试必刷TOP101:最长无重复子数组
    1.简述:描述给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1......
  • NC14356 s01串
    链接:https://ac.nowcoder.com/acm/problem/14356来源:牛客网题目描述s01串初始为"0"按以下方式变换0变1,1变01输入描述:1个整数(0~19)输出描述:n次变换后s01串示例......