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

标签 c++ struct

我有一个应该很简单的问题。我有一个全局函数 (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);
}

最佳答案

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

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

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

tp -> data = newData;

注意 -> 运算符。它是 . 成员访问运算符的等效指针。相当于

(*tp).data = newData;

但它看起来更好。

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

cout << tp -> data;

关于C++ 使用结构指针更新数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176729/

相关文章:

C++倒计时脚本

c++ - 从 C++ 中的另一个程序重定向 stdout

c - OpenSSL 取消引用指向不完整类型的指针

go - 包含嵌入的结构 slice 的结构

c - strcpy() 整数和 double 的替代方案 - c

c++ - 折叠复制和 move 语义的重载

c++ - 在派生类中强制执行正确的虚函数定义

c++ - 多线程 OpenCV 程序

c++ - 如何设置一个元表以从另一个元表继承,同时将用户数据更改为另一种类型?

c - 通过 UDP 发送包含字符串的结构