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

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

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

多谢

4

2 回答 2

2

问题:

  1. struct abc结构的名称吗?是的。
  2. 是否struct abc包含三个字段?是的,它确实。结构元素是:(name一个固定大小为 20 的字符数组)、一个包含学生编号的整数:studnotax- 一个浮点变量。
  3. 是什么rec1rec2为了什么? rec1并且rec2只是 的变量实例struct abc。这是在定义结构的同时自动声明两个变量的简写方式。例如,要在之后使用相同的结构定义声明一个变量,您可以这样做:

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

讨论:

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

例 1

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

但是,由于指针可以指向内存,rec1并且rec2是 struct abc 类型的指针,这意味着您可以指向struct abc. 一个常见的用法是:

例 2

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

struct abc *abc_pointer = &mystruct;//abc_pointer is now _pointing_ to mystruct

要访问结构元素,而不是像通常在第一个和第二个示例中的常规结构中那样使用点/访问运算符,您必须使用指向成员运算符的不同操作:

示例 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/

于 2013-07-27T07:50:20.460 回答
0

rec1并且rec2是您使用该struct abc类型创建的两个变量。

您可以使用以下方法轻松地将结构规范与变量创建分开:

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

struct abc rec1, rec2;

如果要将变量定义为:

struct abc *rec3;

thenrec3将是一个指针类型,它指向一个类型的变量struct abc

于 2013-07-27T07:42:59.847 回答