指向结构体的指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct _friend{
char name[32];
char sex; // m - 男 f - 女
int age;
};
int main(void){
struct _friend girl = {"小珑", 'f', 18};
struct _friend *my_girl = &girl;//定义指向结构体的指针
printf("女生的名字:%s, 性别:%s 年龄:%d\n", girl.name,girl.sex=='m'?"男":"女", girl.age);
//指针访问结构体变量的成员,有两种方式
//方式 1. 直接解引
printf("女生的名字:%s, 性别:%s 年龄:%d\n", (*my_girl).name,(*my_girl).sex=='m'?"男":"女", (*my_girl).age);
//方式 2. 直接使用指针访问 ->
printf("女生的名字:%s, 性别:%s 年龄:%d\n", my_girl->name,my_girl->sex=='m'?"男":"女", my_girl->age);
system("pause");
return 0;
}
实际开发中,常用第二种方式来访问结构体指针变量的成员
使用结构体传递值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct programer{
char name[32];
int age;
int salary;
};
//形参是结构体变量,值传递
struct programer add_salary(struct programer p, int num){
p.salary += num;
return p;
}
//形参使用结构体指针
void add_salary1(struct programer *p, int num){
if(!p) return ;
p->salary += num;
}
//形参使用引用
void add_salary2(struct programer &p, int num){
p.salary += num;
}
//形参是结构体变量,值传递,返回引用
struct programer& add_salary3(struct programer p, int num){
p.salary += num;
return p;
}
int main(void){
struct programer xiaoniu;
strcpy(xiaoniu.name, "小牛");
xiaoniu.age = 28;
xiaoniu.salary = 20000;
//结构体变量做为参数传值是值传递,和 int 等基本类型一样
xiaoniu = add_salary(xiaoniu, 5000);
printf("姓名: %s, 年龄: %d, 薪水: %d\n", xiaoniu.name, xiaoniu.age,xiaoniu.salary);
//指针传值
add_salary1(&xiaoniu, 5000);
printf("姓名: %s, 年龄: %d, 薪水: %d\n", xiaoniu.name, xiaoniu.age,xiaoniu.salary);
//引用传值
add_salary2(xiaoniu, 10000);
printf("姓名: %s, 年龄: %d, 薪水: %d\n", xiaoniu.name, xiaoniu.age,xiaoniu.salary);
//返回引用
xiaoniu = add_salary3(xiaoniu, 20000);
printf("姓名: %s, 年龄: %d, 薪水: %d\n", xiaoniu.name, xiaoniu.age,xiaoniu.salary);
system("pause");
return 0;
}
运行结果如下
返回引用的方法可以成功运行出结果,但是有一个警告,需要注意一下,尽量使用其他方法。
注意: 一般不建议把结构体直接作为函数参数。 因为结构体的 size 比较大,直接传递,消耗性能! 解决方案 : (使用指针和引用,优先使用引用)标签:salary,10.2,struct,int,C++,name,xiaoniu,girl,结构 From: https://blog.csdn.net/m0_57667919/article/details/141170313