问题描述:
// Created by 黑马程序员.
#include "iostream"
#include "string"
using namespace std;
//学生结构体定义
struct student
{
//成员列表
string name; //姓名
int age; //年龄
int score; //分数
};
//const使用场景
void printStudent(const student *stu) //加const防止函数体中的误操作
{
stu->age = 100; //操作失败,因为加了const修饰
cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;
}
int main() {
system("chcp 65001");
student stu = { "张三",18,100 };
printStudent(&stu);
system("pause");
return 0;
}
上面代码为什么报错呢?
问题解答:
在你的代码中,出现错误是因为你在 printStudent
函数内部试图修改 stu->age
,但参数是通过 const
修饰的。这表示该指针指向的内容是只读的,不能被修改。
错误原因
具体来说,这行代码:
stu->age = 100; //操作失败,因为加了const修饰
试图对 stu
所指向的 student
结构体的 age
成员进行修改。由于 stu
被声明为 const student *
,这会导致编译错误,提示不能修改通过 const
指针访问的内容。
正确用法
如果你想保持参数为只读(防止误操作),可以将这行代码删除或注释掉,示例代码如下:
void printStudent(const student *stu) //加const防止函数体中的误操作
{
// stu->age = 100; // 注释掉或删除这一行
cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;
}
这样,函数就能够正常运行,并且能够输出 stu
的信息,而不会尝试去修改它。