70、结构体指针

结构体是一种自定义的数据类型,用结构体可以创建结构体变量。

1)基本语法

在C++中,用不同类型的指针存放不同类型变量的地址,这一规则也适用于结构体。如下:

struct st_girl girl;         // 声明结构体变量girl。

struct st_girl *pst=&girl;  // 声明结构体指针,指向结构体变量girls。

通过结构体指针访问结构体成员,有两种方法:

 (*指针名).成员变量名    // (*pst).name和(*pst).age

或者:

指针名->成员变量名    // pst->name和*pst->age

在第一种方法中,圆点.的优先级高于*,(*指针名)两边的括号不能少。如果去掉括号写成(*指针名).成员变量名,那么相当于*(指针名.成员变量名),意义就完全不一样了。

在第二种方法中,->是一个新的运算符。

上面的两种方法是等效的,程序员通常采用第二种方法,更直观。

注意:与数组不一样,结构体变量名没有被解释为地址。

2)用于函数的参数

如果要把结构体传递给函数,实参取结构体变量的地址,函数的形参用结构体指针。

如果不希望在函数中修改结构体变量的值,可以对形参加const约束。

3)用于动态分配内存

用结构体指针指向动态分配的内存的地址。

示例:

#include <iostream>
#include <string>
#include <cstdlib> // 包含malloc和free

// 定义结构体
struct st_girl {
    std::string name;
    int age;
};

// 函数声明,使用结构体指针作为参数,参数前加const以防止修改实参
void displayGirl(const st_girl* girl) {
    std::cout << "Name: " << girl->name << ", Age: " << girl->age << std::endl;
}

int main() {
    // 静态分配结构体变量
    st_girl girl1 = {"Alice", 20};

    // 创建结构体指针并指向静态分配的结构体变量
    st_girl *pst = &girl1;

    // 通过指针访问并显示结构体成员
    std::cout << "Using pointer access: " << std::endl;
    displayGirl(pst);

    // 动态分配结构体变量
    st_girl *pgirl = (st_girl*)malloc(sizeof(st_girl));
    if (pgirl == nullptr) {
        std::cerr << "Memory allocation failed." << std::endl;
        return 1;
    }

    // 初始化动态分配的结构体
    pgirl->name = "Betty";
    pgirl->age = 22;

    // 通过指针访问并显示结构体成员
    std::cout << "Using dynamic memory allocation: " << std::endl;
    displayGirl(pgirl);

    // 释放动态分配的内存
    free(pgirl);

    return 0;
}

上述代码展示了以下几个重要的概念:

  1. 结构体的声明与使用:定义了一个名为st_girl的结构体,包含字符串name和整数age
  2. 静态与动态内存管理:静态分配使用在栈上定义的变量girl1,动态分配使用malloc在堆上创建。
  3. 函数参数传递:通过指针将结构体传递给函数displayGirl,在函数定义时用const确保不会修改传入的结构体。
  4. 指针访问:使用->操作符直接访问结构体成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值