在C语言中,结构是一个用户定义的变量,用于在一个单一实体下存储变量的集合。让我们用一个简单的比喻来解释C语言中结构的实现和作用。
假设我们想存储使用某个特定服务的用户的信息。这些信息可以包括用户名、电子邮件、地址、服务模式等等。为了存储这些信息,我们可以去创建每个属性作为一个独立的变量。然而,当我们有十多个用户时,代码会失去控制,变得非常难读和令人厌烦。
为了解决这个问题,我们可以创建一个结构。在这个结构中,我们可以存储所有用户共享的所有属性,然后为每个用户添加独特的变量。
让我们看一下各种例子,看看如何实现这一点。
如何在C语言中定义一个结构
要在C语言中定义一个结构,我们使用结构关键字,后面是结构的名称。在名称之后,我们有一对大括号,用来添加成员。
请看下面的语法。
struct struct_name
{
/* data */
type member_name;
type member_name2;
type member_name3;
...
type member_nameN;
};
结构的名称可以是你想要的任何东西,只要它遵守C语言的命名规则。
我们可以实现一个用户类比的例子结构,如。
struct users
{
char username[20];
char email[225];
char address[50];
int age;
bool registered;
};
如何创建结构变量
有两种主要的方法来创建结构变量。第一种是像普通变量一样声明它们,另一种是使用大括号来设置它们。
下面的例子显示了如何将结构变量作为标准的C变量来声明。
struct users
{
char username[20];
char email[225];
char address[50];
int age;
bool registered;
};
int main(int argc, char const *argv[])
{
struct users user1, user2, user3
return 0;
}
另一种创建结构变量的方法如下所示。
struct users
{
char username[20];
char email[225];
char address[50];
int age;
bool registered;
} user1, user2, user3;
在这个例子中,我们在结构声明时创建它们。
结构成员初始化
你不能在创建过程中初始化结构成员,因为没有为该类型分配内存。
为了初始化结构成员,你可以使用大括号,如下所示。
struct users
{
char username[20];
char email[225];
char address[50];
int age;
bool registered;
};
int main(int argc, char const *argv[])
{
struct users user1 = {"myusername", "zero@user.name", 35, true}
user1.email = "zero@vuln.io"
return 0;
}
访问结构成员
要访问一个结构的成员,我们使用点运算符,以结构名称、点和成员的名称开始。
typedef struct users
{
char username[20];
char email[225];
char address[50];
int age;
bool registered;
} u;
int main(int argc, char const *argv[])
{
u user1 = {"myusername", "zero@user.name", 35, true}
user1.registered = false
return 0;
}
在这个例子中,我们访问user1的成员。
Typedef 关键字
我们使用typedef关键字为数据类型创建一个别名,使代码更容易阅读。
比如说
typedef struct users
{
char username[20];
char email[225];
char address[50];
int age;
bool registered;
} u;
int main(int argc, char const *argv[])
{
u user1 = {"myusername", "zero@user.name", 35, true}
user1.registered = false
return 0;
}
在上面的例子中,我们为 "用户 "结构创建了一个别名 "u"。因此,我们不需要每次都调用struct users。我们可以按照上面的定义使用 "u"。
结构指针
你也可以有一个指向结构的指针。这样做允许你使用->操作符访问成员。
比如说
typedef struct users
{
char username[20];
char email[225];
char address[50];
int age;
bool registered;
} u;
int main(int argc, char const *argv[])
{
u user1 = {"myusername", "zero@user.name", 35, true}
// pointer to another structure
u *user_ptr = &user1
user_ptr -> username = "ptrusername"
return 0;
}
结论
本指南涵盖了在C语言编程中使用结构的基本知识。
谢谢你的阅读!