我有一个应该很简单的问题。我有一个全局函数(setData),它接受指向我的测试结构的指针。当我尝试更新数据成员时,它不工作。
#include <iostream>
using namespace std;
struct test {
int data;
};
void setData(test* tp, int newData) {
test t = *tp; // I think the problem is here.
t.data = newData;
}
void printData(test* tp) {
test testStruct = *tp;
cout << testStruct.data;
}
int main()
{
test ts;
ts.data = 22;
setData(&ts, 44);
printData(&ts);
}发布于 2012-04-16 23:10:48
test t = *tp; // I think the problem is here.
是的,你是对的!您的代码正在制作副本,修改它,然后立即丢弃它。
您应该改为修改通过指针传入的结构:
tp -> data = newData;请注意->操作符。它是与.成员访问运算符等效的指针。它等同于
(*tp).data = newData;但它看起来更好。
您可以在printData中做同样的事情,尽管这只是一种低效:
cout << tp -> data;发布于 2012-04-16 23:10:37
您在setData中所做的就是创建一个新的结构,并在其中更改数据。
你想要做的是:
void setData(test* tp, int newData) {
tp->data = newData;
}发布于 2012-04-16 23:10:38
test t = *tp;在影响之前复制对象。因此,修改会丢失。您需要访问指向的对象:
tp->data = newData;在深入研究C++之前,我建议您多阅读一些关于指针和结构的一般知识。
https://stackoverflow.com/questions/10176729
复制相似问题