将双*指定给V[3]
Assigning double * to V[3]
本文关键字:将双 更新时间:2023-10-16
我有一个函数,它返回double *
double* addVectors( double* vec1, double* vec2 )
{
double vec[3];
for( int i = 0; i < 3; i++ )
vec[i] = vec1[i] + vec2[i];
return vec;
}
如何将addVectors
的结果分配给数组?我做了以下事情,但我相信有一种专业的方法可以做到。
double A[3] = {1, 2, 3};
double B[3] = {4, 5, 6};
double C[3];
double *val = addVectors( A, B );
C[0] = val[0];
C[1] = val[1];
C[2] = val[2];
addVectors
返回一个指向本地数组的指针,当addVectors
返回时,val
变成垃圾数据。
您可以将第三个参数传递给addVectors
,但需要确保所有vec
至少有3个元素:
void addVectors( double* vec1, double* vec2, double* vec)
{
for( int i = 0; i < 3; i++ )
vec[i] = vec1[i] + vec2[i];
}
double A[3] = {1, 2, 3};
double B[3] = {4, 5, 6};
double C[3] = {}; // initialize all C elements to 0.0
addVectors(A,B,C);
我的建议是使用STL容器,如std::vector、std::list等,或者如果启用了C++11,则使用st::array。
使用STL容器可以归档您的意图:
std::vector<double> addVectors(const std::vector<double>& v1,
const std::vector<double>& v2)
{
std::vector<double> v;
for( int i = 0; i < 3; i++ )
{
v.push_back(v1[i] + v2[i]);
}
return v;
}
int main()
{
std::vector<double> A = {1, 2, 3};
std::vector<double> B = {4, 5, 6};
std::vector<double> C(3, 0.0);
std::vector<double> D = addVectors(addVectors(A,B),C);
for(auto& e : D)
{
cout << e << endl;
}
}
从函数返回数组的另一种方法是将其嵌入到结构中,因为这样内容就会被复制:
typedef struct
{
double vec[3];
} vecret;
vecret addVectors( double* vec1, double* vec2 )
{
vecret V;
double vec[3];
for( int i = 0; i < 3; i++ )
{
V.vec[i] = vec1[i] + vec2[i];
}
return V;
}
相关文章:
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 使用 Xcode 将双精度存储在数组C++中
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 将双精度变量设置为另一个变量的值
- 将双精度值转换为 char 变量时字符串流如何工作
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 将双倍转换为 LPARAM 的麻烦
- 使用 sprintf 和 %g 将双精度转换为字符串的意外结果
- C++,遇到将双精度转换为整数的问题
- 将双精度值分配给 int 数组时的类型转换
- 坚持将双指针管理的内存复制到二维数组
- 将双指针作为参数传递给需要引用 std::vector <double>的函数
- 将双倍转换为字符数组C++
- 为什么将双端移动到向量时出现 C26486 编译器错误?
- 将双精度的科学记数法附加到 ostringstream 时如何关闭它?
- 将双精度与整数进行比较
- 使用霍华德·欣南特的日期库将双倍转换为zoned_time
- 计算向量的std ::映射为键的值,并将双倍作为值
- 使用 std::chrono / date::gps_clock 将双 GPS 时间戳转换为 UTC/tai