在这个特定的场景中使用指针的用途是什么?

What is the uses of using a pointer in this specific scenario?

本文关键字:指针 是什么      更新时间:2023-10-16

在这个场景中,我声明了一个结构体Data

struct Data {
       string first;
       string middle;
       string last;
       int age;
       };
根据我的笔记,我们然后创建一个
vector<Data*> list;

要向列表中添加项目,我们必须手动创建一个新的数据指针并设置属性。

Data* variable;
variable=new Data;
list.pushback<variable>

我看不出使用这种方法的优点。为什么我们不能用这个?

vector<Data> list;

为了向列表中添加项目,我创建了一个新的Data变量,然后使用list.pushback<variable>;

我说这两种方法都有效吗?

首先必须是

 list.push_back(variable)

代替

list.pushback<variable>

的不同之处在于,在情况1中,您创建了一个指向变量的指针,这意味着您只在列表中存储变量的地址。这段代码

#include <string>
#include <vector>
#include <iostream>
using namespace std;
struct Data {
    string first;
    string middle;
    string last;
    int age;
};
int main()
{
vector<Data*> list;

Data* variable;
variable = new Data;
list.push_back(variable);
cout << list[0];
cin.get();
return 0;
}

将只返回存储变量的内存位置的地址。要返回某个变量的值你可以使用

vector<Data*> list;
Data* variable;
variable = new Data;
variable->setage(5);
list.push_back(variable);
cout <<  (*list[0]).getage();
cin.get();
return 0;
}

其中*list[0]对指针进行解引用,这意味着你得到的是指针的值,而不是指针的地址。

如果不使用指针而使用

vector<Data> list;

Data variable;
list.push_back(variable);
而在

中,您将在列表中存储变量的副本。

在这种情况下你可以直接用

这样的方式来称呼变量
list[0].getage()

如果在Data结构体中创建getage()函数。

如果你不知道怎么做,一个简单的(也许不是最好的)方法是添加

public:
    int getage(){
        return age;
    }
    void setage(int x){
        age = x;
    }
};

这样更快。对于你的情况,如果你要做

Data variable;
// change properties here
list.push_back(variable);

首先在第一行创建一个结构体Data,然后在将其压入列表时复制整个结构体。由于结构体比指向它的指针大,因此这样做的计算效率不如直接压入结构体指针。