网站开发过时了,做一个商城网站多少钱,微信表情开放平台,做创意ppt网站有哪些方面C中结构体的初始化
结构体是一个由程序员定义的数据类型#xff0c;可以容纳许多不同的数据值。在过去#xff0c;面向对象编程的应用尚未普及之前#xff0c;程序员通常使用这些从逻辑上连接在一起的数据组合到一个单元中。一旦结构体类型被声明并且其数据成员被标识…C中结构体的初始化
结构体是一个由程序员定义的数据类型可以容纳许多不同的数据值。在过去面向对象编程的应用尚未普及之前程序员通常使用这些从逻辑上连接在一起的数据组合到一个单元中。一旦结构体类型被声明并且其数据成员被标识即可创建该类型的多个变量就像可以为同一个类创建多个对象一样。
虽然今天结构体较少使用但知道它们是什么以及如何使用它们仍然很重要这并不仅仅是因为可以在较老的程序中遇到它们还因为在某些情况下类的实例无法使用这时必须使用结构体。
声明结构体的方式和声明类的方式大致相同其区别如下
使用关键字 struct 而不是关键字 class。尽管结构体可以包含成员函数但它们很少这样做。所以通常情况下结构体声明只会声明成员变量。结构体声明通常不包括 public 或 private 的访问修饰符。类成员默认情况是私有的而结构体的成员则默认为 public。程序员通常希望它们保持公开只需使用默认值即可。
以下是一个结构体声明的示例该结构体将 5 个变量绑定在一起保存了员工的工资单数据。这个特殊结构体的名称是 PayRoll。请注意它以大写字母开头这和类名使用大写字母开头的约定一样。另外还要注意与类声明一样在结构体声明的大括号后面必须有一个分号。
struct PayRoll
{int empNumber;string name;double hours,payRate,grossPay;
};正如在类的对象被创建之前类声明不会被实例化一样结构体声明不会创建任何结构体的实例。本示例中的结构体声明只是告诉编译器PayRoll结构体看起来的样子。它本质上是创建一个名为 PayRoll 的新数据类型。
定义 PayRoll 结构体的变量和定义其他任何变量的方式并无二致首先列出数据类型然后是变量名称。以下定义语句创建了 PayRoll 结构体的 3 个变量
PayRoll deptHead, foreman, associate;它们每一个都是 PayRoll 结构体的实例可以被分配和拥有自己的内存以保存其成员数据。
当定义结构体变量时可以通过两种方式初始化它使用初始化列表或构造函数。
初始化列表
初始化结构体变量成员的最简单的方法是使用初始化列表。初始化列表是用于初始化一组内存位置的值列表。列表中的项目用逗号分隔并用大括号括起来。
例如假设已经声明了以下 Date 结构体
struct Date
{int day, month, year;
};定义和初始化 Date 变量的方式是先指定变量名后接赋值运算符和初始化列表如下所示
Date birthday {23, 8, 1983};该声明定义 birthday 是一个 Date 结构体的变量大括号内的值按顺序分配给其成员。所以 birthday 的数据成员已初始化如图 2 所示。 也可以仅初始化结构体变量的部分成员。例如如果仅知道要存储的生日是8月23日 但不知道年份则可以按以下方式定义和初始化变量
Date birthday {23,8};这里只有 day 和 month 成员被初始化year 成员未初始化。但是如果某个结构成员未被初始化则所有跟在它后面的成员都需要保留为未初始化。使用初始化列表时C 不提供跳过成员的方法。以下语句试图跳过 month 成员的初始化。这是不合法的。
Date birthday {23,1983}; //非法还有一点很重要不能在结构体声明中初始化结构体成员因为结构体声明只是创建一个新的数据类型还不存在这种类型的变量。例如以下声明是非法的
//非法结构体声明
struct Date
{int day 23,month 8,year 1983;
}因为结构体声明只声明一个结构体“看起来是什么样子的”所以不会在内存中创建成员变量。只有通过定义该结构体类型的变量来实例化结构体才有地方存储初始值。
构造函数初始化结构体
虽然初始化列表易于使用但它有两个缺点
如果有某个成员未被初始化那么在这种情况下跟随在该成员后面的成员都不能初始化。如果结构体包括任何诸如字符串之类的对象那么在许多编译器上它都将无法运行。
在这些情况下可以使用构造函数来初始化结构体成员变量这和初始化类成员变量是相同的。与类构造函数一样结构体的构造函数必须是与结构体名称相同的公共成员函数并且没有返回类型。因为默认情况下所有结构体成员都是公开的所以不需要使用关键字 public。
以下是一个名为 Employee 的结构体的声明语句它包含一个具有两参数的构造函数以便在创建一个 Employee 变量而不向其传递任何参数时提供默认值
struct Employee
{string name; // 员工姓名int vacationDays, // 允许的年假daysUsed; //已使用的年假天数Employee (string n ,int d 0) // 构造函数{name n;vacationDays 10;daysUsed d;}
};该文章会更新欢迎大家批评指正。
推荐一个零声学院的C服务器开发课程个人觉得老师讲得不错 分享给大家LinuxNginxZeroMQMySQLRedis fastdfsMongoDBZK流媒体CDNP2PK8SDocker TCP/IP协程DPDK等技术内容 点击立即学习C/C后台高级服务器课程