学习c++的第九天

编程入门 行业动态 更新时间:2024-10-23 21:30:37

学习c++的<a href=https://www.elefans.com/category/jswz/34/1744057.html style=第九天"/>

学习c++的第九天

目录

结构体

定义与访问结构

结构作为函数参数

指向结构的指针

typedef 关键字

示例 1:为结构体创建类型别名

示例 2:为函数指针创建类型别名


结构体

定义与访问结构

在C++中,结构体(structure)是一种用户自定义的数据类型,用于组合不同类型的数据成员。结构体可以包含变量、函数和其他数据类型。

要定义一个结构体,在C++中使用struct关键字,然后指定结构体的名称和成员变量。结构体的定义位于大括号{}内部,每个成员变量都由其类型和名称组成,并用分号;分隔。

struct 语句的格式如下:

struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;
  • type_name是为结构体定义的名称,它可以自定义,但建议遵循C++命名约定,例如使用驼峰式命名法。类似于变量名或函数名,结构体名称也需要唯一。
  • 在结构体定义的末尾,可以选择性地指定一个或多个结构体变量。这些变量将使用结构体类型中定义的成员变量分配内存空间。结构体变量的定义方式与其他变量的定义方式相同。
  • 结构体成员变量可以是任何有效的数据类型,包括基本类型(如int、float等)、自定义类型(如字符串、数组等)和其他结构体类型。结构体成员变量之间用逗号分隔。
  • 结构体成员变量的访问方式是使用点运算符  “.”,例如:object.member_name。其中,object是结构体变量的名称,member_name是结构体成员变量的名称。
  • 结构体变量的初始化方式与其他变量的初始化方式相同,可以使用赋值运算符或花括号语法。

下面是一个示例,演示如何定义一个名为Person的结构体,并创建两个Person结构体变量:

#include <iostream>
#include <string>// 定义结构体
struct Person {std::string name;int age;double height;
} person1, person2; // 创建两个Person结构体变量int main() {// 初始化person1结构体变量person1.name = "Alice";person1.age = 25;person1.height = 1.65;// 初始化person2结构体变量person2.name = "Bob";person2.age = 30;person2.height = 1.8;// 访问结构体成员std::cout << "Name: " << person1.name << std::endl;std::cout << "Age: " << person1.age << std::endl;std::cout << "Height: " << person1.height << " meters" << std::endl;std::cout << "Name: " << person2.name << std::endl;std::cout << "Age: " << person2.age << std::endl;std::cout << "Height: " << person2.height << " meters" << std::endl;return 0;
}

在上述代码中,我们使用struct关键字定义了一个名为Person的结构体,并在大括号内部定义了三个成员变量:name、age和height。然后,在结构体定义的末尾,我们定义了两个Person结构体变量:person1和person2。

在main函数中,我们初始化了这两个结构体变量,并使用点运算符.访问它们的成员变量。最后,我们使用std::cout语句打印结构体中的成员变量值。

结构作为函数参数

在C++中,可以将结构作为函数的参数传递。这意味着我们可以将结构体变量作为参数传递给函数,以便在函数中访问和操作结构体成员变量。

结构体可以作为函数参数传递,有两种传递方式:

  • 传值方式:将整个结构体作为参数传递给函数,这将复制整个结构体,并将副本传递给函数。在函数中对结构体成员变量的更改不会影响原始结构体。
  • 引用方式:将结构体作为引用参数传递给函数,这将允许函数直接访问原始结构体。在函数中对结构体成员变量的更改将直接反映在原始结构体上。

下面是一个示例程序,演示如何将结构体作为函数参数传递:

#include <iostream>
#include <string>// 定义结构体
struct Person {std::string name;int age;double height;
};// 函数声明
void printPerson(Person p); // 传值方式
void updatePerson(Person& p, std::string newName, int newAge, double newHeight); // 引用方式int main() {// 创建一个Person结构体变量Person person;person.name = "Alice";person.age = 25;person.height = 1.65;// 传值方式调用函数printPerson(person);// 引用方式调用函数updatePerson(person, "Bob", 30, 1.8);printPerson(person);return 0;
}// 函数定义 - 传值方式
void printPerson(Person p) {std::cout << "Name: " << p.name << std::endl;std::cout << "Age: " << p.age << std::endl;std::cout << "Height: " << p.height << " meters" << std::endl;
}// 函数定义 - 引用方式
void updatePerson(Person& p, std::string newName, int newAge, double newHeight) {p.name = newName;p.age = newAge;p.height = newHeight;
}

在上面的示例程序中,我们定义了一个名为Person的结构体,并创建了一个名为person的结构体变量。然后,我们调用了两个函数printPerson和updatePerson,并将person作为参数传递给这些函数。

printPerson函数采用传值方式将结构体作为参数传递,而updatePerson函数采用引用方式将结构体作为参数传递。

在printPerson函数中,我们使用点运算符"."访问结构体成员变量,并打印它们的值。

在updatePerson函数中,我们使用引用参数修改了结构体成员变量的值。由于p是指向person结构体的引用,因此对p的更改将直接反映在person结构体上。

最后,我们再次调用printPerson函数,并打印已更新的结构体成员变量的值。

指向结构的指针

在C++中,可以使用指针来引用和操作结构体。指向结构的指针指向结构体变量的内存地址,允许我们通过解引用操作符(*)来访问和修改结构体成员变量。

以下是一个示例演示如何声明和使用指向结构的指针:

#include <iostream>
#include <string>// 定义结构体
struct Person {std::string name;int age;double height;
};int main() {// 创建一个Person结构体变量Person person;person.name = "Alice";person.age = 25;person.height = 1.65;// 创建指向Person结构体的指针,并将其指向person变量Person* ptr = &person;// 通过指针访问结构体成员变量std::cout << "Name: " << ptr->name << std::endl;std::cout << "Age: " << ptr->age << std::endl;std::cout << "Height: " << ptr->height << " meters" << std::endl;// 修改结构体成员变量ptr->name = "Bob";ptr->age = 30;ptr->height = 1.8;// 通过原始结构体变量访问已修改的成员变量std::cout << "Name: " << person.name << std::endl;std::cout << "Age: " << person.age << std::endl;std::cout << "Height: " << person.height << " meters" << std::endl;return 0;
}

在上述示例中,我们定义了一个名为Person的结构体,并创建了一个名为person的结构体变量。

然后,我们声明了一个指向Person结构体的指针ptr,并使用取地址运算符(&)将其指向person变量的内存地址。

通过指针访问结构体成员变量时,我们使用箭头运算符(->),它结合了解引用操作符(*)和点运算符(.)。例如,ptr->name等效于(*ptr).name,允许我们访问ptr所指向的结构体的成员变量。

我们还可以通过指针对结构体成员变量进行修改。例如,ptr->name = "Bob"将修改person的name成员变量的值。

最后,我们通过原始结构体变量访问已修改的成员变量,并打印它们的值。

请注意,当使用指向结构的指针时,需要确保指针指向有效的结构体对象。否则,解引用指针可能会导致未定义的行为或错误。

typedef 关键字

typedef是C和C++中的关键字,用于为已存在的类型创建一个新的类型别名。通过typedef,您可以为已有类型指定一个新的名称,从而增强代码的可读性和可维护性。

typedef的语法如下:

typedef existing_type new_type;

其中,existing_type是已存在的类型,而new_type是您为该类型定义的新的类型别名。

下面是一些使用typedef的例子:

typedef int myInt; // 为int类型创建一个新的类型别名为myInttypedef unsigned int uint; // 为unsigned int类型创建一个新的类型别名为uinttypedef float distance; // 为float类型创建一个新的类型别名为distancetypedef int* IntPtr; // 为int*类型(指向int的指针)创建一个新的类型别名为IntPtrtypedef void (*FuncPtr)(int); // 为函数指针类型创建一个新的类型别名为FuncPtr

在上述示例中,我们使用typedef关键字为不同的类型创建了新的类型别名。这些类型别名可以像普通类型一样使用,提供了更具描述性的名称,使得代码更易于理解和维护。

例如,在第一个例子中,我们为int类型创建了一个新的类型别名myInt。现在,我们可以使用myInt关键字来声明变量,就像使用int一样:

myInt num = 10;

同样,其他的类型别名也可以按照这种方式使用。

需要注意的是,typedef只是为已存在的类型创建了一个新的名称,它并没有创建新的类型。因此,typedef并不会引入新的数据类型,只是给现有的类型起了一个别名。

示例 1:为结构体创建类型别名
#include <iostream>// 定义一个结构体
struct Person {std::string name;int age;
};// 为结构体创建类型别名
typedef struct Person PersonStruct;int main() {// 使用类型别名创建结构体变量PersonStruct person;person.name = "John";person.age = 25;// 输出结构体成员std::cout << "Name: " << person.name << std::endl;std::cout << "Age: " << person.age << std::endl;return 0;
}

在上述示例中,我们定义了一个名为Person的结构体。然后,使用typedef关键字为该结构体创建了一个新的类型别名PersonStruct。接着,在main函数中,我们使用PersonStruct类型别名来声明了一个结构体变量person,并对其进行赋值和输出。

示例 2:为函数指针创建类型别名
#include <iostream>// 原始的函数原型
void myFunction(int x);// 为函数指针创建类型别名
typedef void (*FuncPtr)(int);int main() {// 使用类型别名声明函数指针变量FuncPtr ptr = &myFunction;// 调用函数通过指针ptr(5);return 0;
}// 实现函数
void myFunction(int x) {std::cout << "The value is: " << x << std::endl;
}

在上述示例中,我们首先定义了一个函数myFunction,它接受一个整数参数并没有返回值。然后,使用typedef关键字为该函数指针类型创建了一个新的类型别名FuncPtr。在main函数中,我们使用FuncPtr类型别名来声明了一个函数指针变量ptr,并将其指向myFunction函数。最后,通过函数指针调用了myFunction函数。

这些示例展示了typedef的使用,以便为已存在的类型创建新的类型别名。

更多推荐

学习c++的第九天

本文发布于:2023-11-16 18:28:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1631977.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:第九天

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!