4月从零学习C语言(第23天)——结构类型

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

结构类型结构体

在C语言中我们想要表达一个数据就要什么一个变量但是每个变量又都有类型但是如果我们想表达一个比较复杂的值。我们该怎么办呢看下面一个例子

#include <stdio.h>

int main(int argc,char const *argv[])
{
  struct date {
    int month;
    int day;
    int year;
  };
  struct date today;
  today.month = 04;
  today.day = 23;
  today.year = 2022;
  printf("Today's date is %i-%i-%i.\n",
    today .year,today.month,today.day);
  return 0;
}

运行结果
在这里插入图片描述在上面的代码中我们实现了复杂值的表达那么它用到了我们C语言当中的结构。

声明结构的形式

形式1

struct point {
  int x;
  int y;
};
struct point pl, p2;

pl和p2都是point里面有x和y的值

形式2

struct {
  int x;
  int y;
} pl,p2;

pl和p2都是一种无名结构里面有x和y

形式3

struct point {
  int x;
  int y;
} pl,p2;

pl和p2都是point里面有x和y的值t

注意
对于第一和第三种形式都声明了结构point。但是第二种形式没有声明point只是定义了两个变量

结构声明在函数内/外?

在一开始的例子中我们的结构是声明在函数里的那么它和本地变量一样在函数内部声明的结构类型只能在函数内部使用。

那如果我们在函数外部生命呢

看一下

#include <stdio.h>

struct date {
  int month;
  int day;
  int year;
};

int main(int argc,char const *argv[])
{
  
  struct date today;
  today.month = 04;
  today.day = 23;
  today.year = 2022;
  printf("Today's date is %i-%i-%i.\n",
    today .year,today.month,today.day);
  return 0;
}

运行结果
在这里插入图片描述
我们可以看到我们在函数外部声明结构依然可以使用所以通常在函数外部声明结构类型这样就可以被更多的函数所使用了。

结构的初始化

方式1

#include <stdio.h>

struct date {
  int month;
  int day;
  int year;
};

int main(int argc,char const *argv[])
{
  
  struct date today = {07,31,2014};

  printf("Today's date is %i-%i-%i.\n",
    today .year,today.month,today.day);

  return 0;
}

方式2

#include <stdio.h>

struct date {
  int month;
  int day;
  int year;
};

int main(int argc,char const *argv[])
{
  struct date thismonth = {.month=7 , .year=2014};
  
  printf("This month is %i-%i-%i.\n",
    thismonth.year,thismonth.month,thismonth.day);
    
  return 0;
}

结构成员

  • 结构和数组有点像

  • 数组用运算符和下标访问其成员

    • a[0]= 10;
  • 结构用.运算符和名字访问其成员

    • today.day
    • student.firstName
    • pl.x
    • pl.y

结构运算

  • 要访问整个结构直接用结构变量的名字
  • 对于整个结构可以做赋值、取地址也可以传递给函数参数
pl = (struct point){5,10};//相当于pl.x = 5;pl.y = 10;
pl = p2;//相当于pl.x = p2.x; pl.y = p2.y;

结构指针

  • 和数组不同结构变量的名字并不是结构变量的地址必须使用&运算符
struct date *pDate = &today;
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6