需要在结构C编程中解释,不懂代码

时间:2013-07-27 07:40:37

标签: c structure

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

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

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

非常感谢

2 个答案:

答案 0 :(得分:2)

问题:

  1. 结构的名称是struct abc吗?是的,是。
  2. struct abc是否包含三个字段?是的,确实如此。结构元素是:name(固定大小为20的字符数组),一个保存学生编号的整数:studnotax - 这是一个浮点变量。< / LI>
  3. 什么是rec1rec2 rec1rec2只是struct abc的变量实例。它是在定义结构的同时自动声明两个变量的简便方法。例如,要在之后使用相同的结构定义声明变量,您可以按如下方式执行:

    struct abc mystruct = {};//initialize the struct variable mystruct
    
  4. 如果rec1rec2同时为*rec1*rec2 - 有什么区别?在这种情况下,您已创建类型为struct abc的两个指针变量。这意味着他们可以指向struct abc的变量或实例,而rec1rec2只是struct abc的实例。

  5. 讨论:

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

    示例1

    struct abc mystruct = {};
    mystruct.name = "My Name";
    

    但是,由于指针可以指向到内存,而rec1rec2是struct abc类型的指针,这意味着您可以指向变量或实例struct abc。一个常见的用法是:

    示例2

    struct abc mystruct = {};
    mystruct.name = "My Name";
    
    struct abc *abc_pointer = &mystruct;//abc_pointer is now _pointing_ to mystruct
    

    访问结构元素,而不是像第1和第2个示例中常规结构中那样使用点/访问运算符,您必须使用指向成员的指针运营商:

    示例3:

    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";
    

    当然,除了我所描述的,你可以用这些知识来做更多的事情。有关该主题的更多信息,请阅读以下内容: http://boredzo.org/pointers/

答案 1 :(得分:0)

rec1rec2是您使用struct abc类型创建的两个变量。

您可以轻松地将结构特征与变量创建分开:

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

struct abc rec1, rec2;

如果要将变量定义为:

struct abc *rec3;

然后rec3将是一个指针类型,它意味着指向struct abc类型的变量。