如果需要保留作为参数传递给函数中修改的值,那就要用地址传递, 并且地址传递只占4个字节内存空间,可以减少内存空间的占用,值传递会在函数中复制一分新的副本,若参数占用内存较大,那么会比较损耗性能。如果想利用指针的同时不修改原本的数据,那么可以将形参定义为常量指针 即: const struct* 变量名
#include<iostream>
using namespace std;
/*
定义学生结构体
*/
struct student {
// 姓名
string name;
// 年龄
int age;
// 得分
int score;
};
/*
通过值传递在函数中修改结构体成员的值
*/
void updateStudent1(student s)
{
s.age = 100;
}
/*
通过地址传递在函数中修改结构体成员的值
*/
void updateStudent2(student* p)
{
p->age = 100;
}
int main()
{
// 初始学生结构体
student s = { "张三", 18, 200 };
cout << "原始学生的姓名:" << s.name << "\n";
cout << "原始学生的年龄:" << s.age << "\n";
cout << "原始学生的得分:" << s.score << "\n";
cout << "--------------------------------------------------------------\n";
// 值传递
updateStudent1(s);
cout << "执行值传递的修改函数执行后学生的姓名:" << s.name << "\n";
cout << "执行值传递的修改函数执行后学生的年龄:" << s.age << "\n";
cout << "执行值传递的修改函数执行后学生的得分:" << s.score << "\n";
cout << "--------------------------------------------------------------\n";
cout << endl;
// 总结:结构体中可以使用另一个结构体作为成员属性
updateStudent2(&s);
cout << "执行地址传递的修改函数执行后学生的姓名:" << s.name << "\n";
cout << "执行地址传递的修改函数执行后学生的年龄:" << s.age << "\n";
cout << "执行地址传递的修改函数执行后学生的得分:" << s.score << "\n";
cout << "--------------------------------------------------------------\n";
/*总结:如果需要保留作为参数传递给函数中修改的值,那就要用地址传递, 并且地址传递只占4个字节内存空间,可以减少内存空间的占用,值传递会在函数中复制一分新的副本,
若参数占用内存较大,那么会比较损耗性能。如果想利用指针的同时不修改原本的数据,那么可以将形参定义为常量指针 即: const struct* stu*/
system("pause");
return 0;
}
|