结构体指针

一:基本语法

 

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

struct student a;
//声明结构体变量
struct student* p=&a;
//声明结构体指针,指向结构体变量a

用结构体指针访问结构体:指针名->成员变量名。如:

p->name;

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

二:用处

类似普通指针;

1.用于函数的参数

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

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

#include <iostream>
using namespace std;

struct student {
    char name[21];
    int age;
    double weight;
    char sex; // 假设用 'Y' 表示男性,'X' 表示女性
    bool yanzhi;
} a = { "钟佳铭", 18, 60.5, 'Y', true };

void func(student* p ) {//传入的形参用结构体的指针
    cout << p->name << p->age << p->weight << p->sex << p->yanzhi << endl;
}

int main() {
    student* p = &a;
    func(&a);//传入的是实参取结构体变量的地址
    return 0;
}

在func()函数中,转进来的是实参的地址,那就可以通过结构体指针来修改实参的值。

如下把姓名改为 区亮钊 年龄改为88

#define _CRT_SECURE_NO_WARNINGS 
//在VS中如果要使用C标准的字符串操作函数,需要在源代码最上面加上这行内容
#include <iostream>
using namespace std;

struct student {
    char name[21];
    int age;
    double weight;
    char sex; // 假设用 'Y' 表示男性,'X' 表示女性
    bool yanzhi;
} a = { "钟佳铭", 18, 60.5, 'Y', true };

void func(student* p) {//传入的形参用结构体的指针
    cout << p->name << p->age << p->weight << p->sex << p->yanzhi << endl;
    strcpy(p->name, "区亮钊");
    p->age = 88;
}
int main() {
    student* p = &a;
    func(&a);//传入的是实参取结构体变量的地址
    cout << p->name << p->age << p->weight << p->sex << p->yanzhi << endl;
    return 0;
}

运行结果如下:(实参在函数中被修改了)

如果不想让实参在函数中被修改,可以把函数形参加上const约束。

报错了。

2.用于动态分配内存

new一个zxd出来,并把信息全初始化为0。

int main() {
    student* zxd = new student({ });//初始化
    func(zxd);
    cout << zxd->name << zxd->age << zxd->weight << zxd->sex << zxd->yanzhi << endl;
    delete zxd;
    return 0;
}

正常初始化就

 student* zxd = new student( { "朱栩迪", 12, 90.5, 'Y', true  });//初始化

C++万能头: #include<bits/stdc++.h>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值