首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++使用结构指针更新数据成员

问C++使用结构指针更新数据成员
EN

Stack Overflow用户
提问于 2012-04-16 23:07:48
回答 7查看 5.1K关注 0票数 3

我有一个应该很简单的问题。我有一个全局函数(setData),它接受指向我的测试结构的指针。当我尝试更新数据成员时,它不工作。

代码语言:javascript
复制
#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);
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-04-16 23:10:48

test t = *tp; // I think the problem is here.

是的,你是对的!您的代码正在制作副本,修改它,然后立即丢弃它。

您应该改为修改通过指针传入的结构:

代码语言:javascript
复制
tp -> data = newData;

请注意->操作符。它是与.成员访问运算符等效的指针。它等同于

代码语言:javascript
复制
(*tp).data = newData;

但它看起来更好。

您可以在printData中做同样的事情,尽管这只是一种低效:

代码语言:javascript
复制
cout << tp -> data;
票数 3
EN

Stack Overflow用户

发布于 2012-04-16 23:10:37

您在setData中所做的就是创建一个新的结构,并在其中更改数据。

你想要做的是:

代码语言:javascript
复制
void setData(test* tp, int newData) {
    tp->data = newData;
}
票数 1
EN

Stack Overflow用户

发布于 2012-04-16 23:10:38

代码语言:javascript
复制
test t = *tp;

在影响之前复制对象。因此,修改会丢失。您需要访问指向的对象:

代码语言:javascript
复制
tp->data = newData;

在深入研究C++之前,我建议您多阅读一些关于指针和结构的一般知识。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10176729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档