C++结构体(struct)、结构体和函数、结构体指针

前言        

        在本文中,您将学习C ++编程中的结构。它是什么,如何定义它并在程序中使用它。结构是一个单一名称下不同数据类型的变量的集合。它与相似,两者都保存着不同数据类型的数据集合。

问题

        例如:您要存储有关某个人的一些信息:其姓名,身份证号码和薪水。您可以轻松创建不同的变量name, citNo, salary来分别存储这些信息。
        但是,将来,您可能希望存储有关多个人的信息。现在,您需要为每个人的每个信息创建不同的变量:name1, citNo1, salary1, name2, citNo2, salary2
        您可以看到变量和代码看起来有多大和混乱。另外,由于变量之间不存在任何关系(信息),因此这将是一项艰巨的任务。

方法

        更好的方法是将所有相关信息收集在一个Person下,并将其用于每个人。 现在,代码看起来也更加简洁,易读且高效。用一个单独的名字Person收集的所有相关信息就是一个结构体。

如何在C ++编程中声明结构体? 

         struct关键字定义一个结构类型,后跟一个标识符(结构的名称)。然后,在花括号内,可以声明该结构的一个或多个成员(在花括号内声明变量)。例如:

struct Person
{
    char name[50];
    int age;
    float salary;
};

        这里定义结构体Person,其具有三个成员:name,age和salary。创建结构时,不会分配内存。结构定义只是创建变量的蓝图。您可以将其作为一种数据类型。当您如下定义整数时:

int foo;

int指定变量foo只能接纳整数元素。 同样,结构定义仅指定结构变量在定义时所拥有的属性。

注意: 切记要以分号(;)结束结构体的声明。

如何定义结构体变量?

一旦你像上面那样声明了一个结构体 Person。你可以定义一个结构变量如下:

Person bill;

这里定义了一个结构变量bill,它的类型是结构体Person。定义了结构体变量后,编译器才分配所需的内存。考虑到您具有32位或64位系统,float的内存为4字节,int的内存为4字节,而char的内存为1字节。因此,为结构体变量bill分配了58个字节的内存。

 如何初始化结构体?

#include<iostream>
struct Person {
	char name[50];
	int age;
	float salary;
};

int main() {
	Person staff; // 这里定义了一个结构变量staff,它的类型是结构体Person。
	staff  = { "张三",20,100 }; // 初始化结构体变量staff
	std::cout << "\n显示信息\n";
	std::cout << "姓名:" << staff.name << std::endl;
	std::cout << "年龄:" << staff.age << std::endl;
	std::cout << "工资:" << staff.salary << std::endl;
}


输出结果: 

如何访问结构体的成员?

        使用点(.)运算符可以访问结构变量的成员。假设您要访问结构变量bill的成员属性age并给其分配值50。您可以使用以下代码执行此任务:

bill.age = 50;

示例:C ++结构

C ++程序,用于将数据分配给结构变量的成员并显示它。

#include<iostream>
struct Person {
	char name[50];
	int age;
	float salary;
};

int main() {
	Person staff; // 这里定义了一个结构变量staff,它的类型是结构体Person。
	std::cout << "输入姓名:";
	std::cin.get(staff.name, 50);
	std::cout << "输入年龄:";
	std::cin >> staff.age;
	std::cout << "输入工资:";
	std::cin >> staff.salary;

	std::cout << "\n显示信息\n";
	std::cout << "姓名:" << staff.name << std::endl;
	std::cout << "年龄:" << staff.age << std::endl;
	std::cout << "工资:" << staff.salary << std::endl;
}


输出结果:

        在这里,声明一个具有三个成员name,age和salary的结构体。在main() 函数内部,定义了一个结构变量staff。然后,要求用户输入信息,并显示用户输入的数据。

结构体和函数

        如何将结构体作为参数传递给函数?
        可以像普通参数一样将结构体变量传递给函数。考虑以下示例:

#include<iostream>
struct Person {
	char name[50];
	int age;
	float salary;
};

void staff_message_display(Person staff) {
	std::cout << "姓名:" << staff.name << std::endl;
	std::cout << "年龄:" << staff.age << std::endl;
	std::cout << "工资:" << staff.salary << std::endl;
}
int main() {
	Person staff1; // 这里定义了一个结构变量staff1,它的类型是结构体Person。
	Person staff2;
	std::cout << "第一个员工\n";
	staff1  = { "张三",20,100 }; // 初始化结构体变量staff1
	staff_message_display(staff1); // 函数调用,结构体变量作为参数

	std::cout << "第二个员工\n";
	staff2 = { "李四", 22, 200 };
	staff_message_display(staff2);
	return 0;
}


输出结果:

 如何从函数中返回结构体?

#include<iostream>
struct Person {
	char name[50];
	int age;
	float salary;
};

void staff_message_display(Person staff) {
	std::cout << "显示员工信息:\n";
	std::cout << "姓名:" << staff.name << std::endl;
	std::cout << "年龄:" << staff.age << std::endl;
	std::cout << "工资:" << staff.salary << std::endl;
}

Person staff_message_input() {
	Person staff;
	std::cout << "输入姓名:";
	std::cin.get(staff.name, 50);
	std::cout << "输入年龄:";
	std::cin >> staff.age;
	std::cout << "输入工资:";
	std::cin >> staff.salary;
	return staff;
}

int main() {
	Person staff1; // 这里定义了一个结构变量staff1,它的类型是结构体Person。
	staff1 = staff_message_input(); 
	staff_message_display(staff1); // 函数调用,结构体变量作为参数

	return 0;
}


输出结果: 

结构体指针 

 

这是创建结构体指针的方法:

示例

#include <iostream>
using namespace std;

struct temp {
    int i;
    float f;
};

int main() {
    temp *ptr;
    return 0;
}

这个程序创建一个结构类型为temp的指针ptr。

示例:结构体指针

#include <iostream>
using namespace std;

struct Distance
{
    int feet;
    float inch;
};

int main()
{
    Distance* ptr, d; // 定义一个Distance类型的指针变量ptr,同时定义一个Distance类型的变量d
    ptr = &d; // 初始化ptr指针变量

    cout << "输入英尺: ";
    cin >> (*ptr).feet;
    cout << "输入英寸: ";
    cin >> (*ptr).inch;

    cout << "显示信息" << endl;
    cout << "距离 = " << (*ptr).feet << " 英尺 " << (*ptr).inch << " 英寸";

    return 0;
}

输出结果: 

        该程序定义了结构体类型的Distance,拥有指针变量ptr和普通变量d。变量d的地址存储在指针变量ptr中,即ptr指向变量d,然后使用指针访问变量d的成员函数。

注意:由于指针ptr在此程序中指向变量d,因此(* ptr).inch和d.inch是完全相同的单元。 同样,(* ptr).feet和d.feet是完全相同的单元。

使用指针访问成员函数的语法很丑陋,但是还有一种更常见的代替符号->

ptr->feet 等同于  (*ptr).feet
ptr->inch 等同于  (*ptr).inch

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值