struct abc
{
char name[20];
int studno;
float tax;
} rec1, rec2;
我刚开始学习结构,老师教得不好,我需要帮助澄清代码。如果我错了,请纠正我谢谢。
那么 struct abc = 结构的名称?它包含3个字段,一个数组,学生编号的整数和税的浮动类型,rec1,rec2是什么?如果rec1,rec2都是*rec1,*rec2,有什么区别?
多谢
问题:
struct abc
结构的名称吗?是的。struct abc
包含三个字段?是的,它确实。结构元素是:(name
一个固定大小为 20 的字符数组)、一个包含学生编号的整数:studno
和tax
- 一个浮点变量。是什么rec1
和rec2
为了什么? rec1
并且rec2
只是 的变量实例struct abc
。这是在定义结构的同时自动声明两个变量的简写方式。例如,要在之后使用相同的结构定义声明一个变量,您可以这样做:
struct abc mystruct = {};//initialize the struct variable mystruct
如果rec1
和rec2
都是*rec1
和*rec2
- 有什么区别?在本例中,您创建了两个类型为 的指针变量struct abc
。这意味着它们可以指向变量或实例,struct abc
而不是rec1
,rec2
它们只是 的实例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/
rec1
并且rec2
是您使用该struct abc
类型创建的两个变量。
您可以使用以下方法轻松地将结构规范与变量创建分开:
struct abc {
char name[20];
int studno;
float tax;
};
struct abc rec1, rec2;
如果要将变量定义为:
struct abc *rec3;
thenrec3
将是一个指针类型,它指向一个类型的变量struct abc
。