假设此结构
typedef struct solution {
int *vector;
float cost;
}solution;
如何将其传递给函数以副本而不是原始形式进行操作?示例:
solution change(solution c){
solution d;
d.vector = c.vector;
d.vector[1]++;
return d;
}
int main(){
int a[3] = {1,2,3};
solution c;
c->vector = a;
solution d = change(c);
printf("%d %d\n",c.vector[1],d.vector[1]);
}
我希望打印3 2
。
很抱歉提出这样一个基本问题,但是根据我在类似问题中的搜索结果,建议使用memcpy
,但与上面的代码相同。
答案 0 :(得分:1)
您的问题基本上是您在使用原始指针:没有。请改用std::vector
。
#include <vector>
struct solution { // No need for typedef - C++ does that automatically.
std::vector<int> vec;
float cost = 0.0f; // Always good to initialize
};
solution change(const solution& c) { // By default, pass 'big' objects by const reference
solution d;
d.vec = c.vec; // This will allocate a new vector and copy the value.
d.vec[1]++;
return d;
}
int main(){
const int a[3] = {1,2,3};
solution c;
std::copy( std::begin(a), std::end(a), std::back_inserter(c.vec));
const solution d = change(c);
printf("%d %d\n",c.vec[1],d.vec[1]);
}
答案 1 :(得分:1)
solution c
和solution d
都持有一个指向同一存储位置的指针,即int a [3]的地址。我认为您不了解的是d.vector = c.vector
,它实际上并不只是复制指向该数组的指针,所以c和d实际上指向同一数组,因此当您尝试打印它时,您将获得相同的值。您可能想看一下malloc
(如果使用的是c ++,则可能是new
),并试图更好地理解指针。