南哪2022-7-data-types
题单介绍
虽然已经说了7-data-types里面并不是data-types的内容,但是我们还是来说说data-types。
某CQ真的不清楚data-types讲的是什么,不过他猜大概是struct,那他就来把struct一般怎么用的来好好讲讲。
struct(结构体)这个东西,它真的非常的好用。因为在C语言当中没有class(对象)这个概念,而struct便因此成为了能媲美class的存在。
先来简单介绍一下struct的基本用法
```c
struct Data//等于是自己定义一种变量类型,这是它的名字
{
int data1;
char data2;
double data3;//里面填你在这个变量里面想存什么东西
};//因为是定义一种变量类型,所以不要忘了加分号
struct Data dat;//定义一个Data变量
dat.data1 = 114514;
dat.data2 = '6';
dat.data3 = 114514.1919810;
//使用struct变量名.内部变量名来调用其中的某一个变量
```
使用struct可以很方便的将多个数据打包,使得程序更加的通俗易懂。
当然,struct的强大之处还不止于此。
#### (对,struct很强大,但是C语言当中并不能写出下文所述的语法,某CQ刚刚才发现写的时候有点想当然了,写都写了,就不删了,反正C语言这样写编译器也不给过。)
定义函数:
没错!struct可以有属于它自己的函数来处理其内部的变量!比如说我们建了一个数组,并想实现在某一个位置添加或者删除某一个元素,我们可以这样来写:
```c
struct MyArray
{
int a[N], len;
void insert(int pos, int x)
{
++len;
for (int i = len; i > pos; --i)
a[i] = a[i - 1];
a[pos] = x;
}
void erase(int pos)
{
--len;
for (int i = pos; i <= len; ++i)
a[i] = a[i + 1];
}
}
int main()
{
struct MyArray arr;
int n;
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &arr.a[i]);
int pos, x;
scanf("%d%d", &pos, &x);
arr.insert(pos, x);
arr.erase(pos);
return 0;
}
```
我们同样可以使用这种很简单的方式来调用struct中的某个函数来方便的对struct中的内容进行一些简单的处理。
学了之前的指针,你也可以将一些常用的函数打包在一个结构体里面,然后想用的时候很方便的拿出来用,还不用担心自己定义的某个函数和里面的重名,多好啊!
struct的用法其实很简单易懂,就稍微找点题练练手好了。