需要解释结构C编程,不需要';我不懂代码

需要解释结构C编程,不需要';我不懂代码,c,structure,C,Structure,我刚开始学习结构,老师教得不好,我需要帮助澄清代码。如果我错了,请纠正我,谢谢 那么struct abc=结构的名称? 它包含3个字段,一个数组,学生号为整数,税为浮动类型 rec1,rec2是干什么的??如果rec1,rec2都是*rec1,*rec2,有什么区别 非常感谢rec1和rec2是您使用该struct abc类型创建的两个变量 您可以通过以下方法轻松地将结构规范与变量创建分离: struct abc { char name[20]; int studno; float

我刚开始学习结构,老师教得不好,我需要帮助澄清代码。如果我错了,请纠正我,谢谢

那么struct abc=结构的名称? 它包含3个字段,一个数组,学生号为整数,税为浮动类型 rec1,rec2是干什么的??如果rec1,rec2都是*rec1,*rec2,有什么区别


非常感谢
rec1
rec2
是您使用该
struct abc
类型创建的两个变量

您可以通过以下方法轻松地将结构规范与变量创建分离:

struct  abc
{
  char name[20];
  int studno;
  float tax;
} rec1, rec2;
如果要将变量定义为:

struct  abc {
    char name[20];
    int studno;
    float tax;
};

struct abc rec1, rec2;
然后,
rec3
将是指针类型,用于指向类型为
struct abc

的变量问题:

  • 是结构abc结构的名称吗?是的
  • 结构abc是否包含三个字段?是的。结构元素是:
    name
    (一个固定大小为20的字符数组),一个保存学生编号的整数:
    studno
    ,以及
    tax
    ——这是一个浮动变量
  • 什么是
    rec1
    rec2
    rec1
    rec2
    只是
    struct abc
    的变量实例。这是一种在定义结构的同时自动声明两个变量的简写方法。例如,要在以后使用相同的结构定义声明变量,可以按如下操作:

    struct abc *rec3;
    
  • 如果
    rec1
    rec2
    都是
    *rec1
    *rec2
    -有什么区别?
    在这种情况下,您创建了两个类型为
    struct abc
    的指针变量。这意味着它们可以指向
    struct abc
    的变量或实例,而不是
    rec1
    rec2
    ,它们只是
    struct abc
    的实例

  • 讨论:

    对于第4点),实际上这意味着:

    例1

    struct abc mystruct = {};//initialize the struct variable mystruct
    
    但是,由于指针可以指向内存,
    rec1
    rec2
    是struct abc类型的指针,这意味着您可以指向
    struct abc
    的变量或实例。通常的用法是:

    例2

    struct abc mystruct = {};
    mystruct.name = "My Name";
    
    要访问结构元素,与第一个和第二个示例中常规结构中通常使用的点/访问运算符不同,您必须使用指向成员的指针运算符:

    例3:

    struct abc mystruct = {};
    mystruct.name = "My Name";
    
    struct abc *abc_pointer = &mystruct;//abc_pointer is now _pointing_ to mystruct
    
    另一种方法是:

    struct abc *abc_pointer = &mystruct;//abc_pointer is now _pointing_ to mystruct
    abc_pointer->name = "Steve";//because you're pointing to mystruct, you can access and modify the values within. In this case, we're changing the name from "My Name" to "Steve"
    
    当然,利用这些知识和能力,你可以做的远不止我所描述的。有关此主题的更多信息,请阅读以下内容:

    (*abc_pointer).name = "Steve";