1结构体

Posted zh-xiaoyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1结构体相关的知识,希望对你有一定的参考价值。

1、为什么需要结构体

  为了表示一些复杂的事物,而普通的基本类型无法满足实际要。

2、求什么叫结构体
  把一些基本类型数据组合在一起形成的一个新的复合数据类型,这个叫做结构体。

3、如何定义结构体

/*----------------------------------------------
结构体的定义方式
-----------------------------------------------
3种方式,推荐使用第一种:
-----------------------------------------------*/

# include <stdio.h>

//第一种方式     这只是定义了一个新的数据类型,并没有定义变量
struct Student
{
    int age;
    float score;
    char sex;
};

//第二种方式
struct Student2
{
    int age;
    float score;
    char sex;
} st2;

//第三种方式
struct 
{
    int age;
    float score;
    char sex;
} st3;

int main(void)
{
    struct Student st = {80, 66.6, F};    

    return 0;
}

4、怎样使用结构体变量

赋值和初始化
  定义的同时可以整体赋初值
  如果定义完之后,则只能单个的赋初值

/*----------------------------------------------
结构体变量的赋值和初始化
-----------------------------------------------*/

# include <stdio.h>

//第一种方式
struct Student
{
    int age;
    float score;
    char sex;
};

int main(void)
{
    struct Student st = {80, 66.6, F}; //初始化  定义的同时赋初值
    struct Student st2;
    st2.age = 10;
    st2.score = 88;
    st2.sex = F;

    printf("%d %f %c
", st.age, st.score, st.sex);          //80 66.599998 F
    printf("%d %f %c
", st2.age, st2.score, st2.sex);       //10 88.000000 F
    
    return 0;
}

5、如何取出结构体变量中的每一个成员【重点】

1) 结构体变量名.成员名
2) 指针变量名-〉成员名(第二种方式更常用)

  指针变量名->成员名在计算机内部会被转化成(*指针变量名).成员名的方式来执行
  所以说这两种方式是等价的

/*----------------------------------------------
如何取出结构体变量中的每一个成员
-----------------------------------------------*/

# include <stdio.h>

struct Student
{
    int age;
    float score;
    char sex;
};

int main(void)
{
    struct Student st = {80, 66.6F, F}; //初始化  定义的同时赋初值
    struct Student * pst = &st;  //&st不能改成st

    pst->age = 88;//第二种方式   
    st.score = 66.6f; //第一种方式  66.6在C语言中默认是double类型,如果希望一个实数是float类型,则必须在末尾加f或F, 
//因此66.6是double, 66.6f或66.6F是float
printf("%d %f ", st.age, pst->score); //88 66.599998:因为浮点型数据不能保证每一个数字都能准确存储 return 0; } /*----------------------------------------------------------------------------------------------- 1.pst->age在计算机内部会被转化成(*pst).age,没有什么为什么,这就是一>的含义,这也是一种硬性规定 2.所以pst->age等价于(*pst).age也等价于st.age 3.我们之所以知道pst->age等价于st.age,是因为pst->age是被转化成了(*pst).age来执行 4.pst->age的含义: pst所指向的那个结构体变量中的age这个成员 ------------------------------------------------------------------------------------------------*/

 

以上是关于1结构体的主要内容,如果未能解决你的问题,请参考以下文章

在C代码中将结构体变量作为参数传递效率忒低

20160221.CCPP体系详解(0031天)

如何优化C ++代码的以下片段 - 卷中的零交叉

Golang PrintfSprintf Fprintf 格式化

C 语言关于结构体做参数传递?

Go 系列教程 —— 17. 方法