C++ 函数返回带有偏移量的数组
c++ function returns array with offset
我正在使用一些与Fortran接口的C代码(不是我自己的),并坚持所有数组都是基于1的。我有一个返回(指针指向)一个数组的方法,我必须正确排列该数组。以下作品:
double* a;
...
a = returnedArray(arraySize);
现在我需要的是让返回对齐 a[1]、a[2]、...相反。(当然,我可以手动转移内容,但必须有更好的方法。我试图让编译器接受
a[1] = returnedArray(arraySize);
*(a+1) = ...
和其他几种排列,但没有成功。网络搜索也没有给我任何有用的东西。
尝试:
`a=returnedArray(arraySize)-1;`
您无法更改 returnedArray()
返回指向数组第一个元素的指针这一事实。而在 C 数组中,第一个元素不可避免地是索引 0。
但是,如果您在使用指针之前将指针偏移一个元素,也许您会实现您的目标?
double * a;
...
a = returnedArray(arraySize) - 1;
...
double firstValue = a[1];
但是,我强烈建议您坚持使用索引 0 作为第一个元素,并以其他方式修复与 Fortran 的接口。当然,在某些时候,如果您继续在代码中混合从 0 开始和从 1 开始的数组,您将引入一个难以发现的错误。
你想做这样的事情吗?数组 A 从选项卡开始[1]
double tab[10];
for(int i = 0 ; i < 10 ; i++){
tab[i] = i;
}
double *a = &tab[1];
for(int i =0 ; i < 9 ; i++){
cout << a[i] << endl;
}
如果 Fortran 和 C 之间的内存是共享的(例如,未复制),则无法自行更改内置 C 类型的索引。但是,您可以为从 Fortran 返回的数组创建一个包装器,这将使访问它们更加方便,并非常清楚地区分 1 索引和 0 索引之间的区别。例如:
class FortranArrayWrapper
{
public:
FortranArrayWrapper(double* a) : A(a) { }
operator double* () const
{
return &A[1];
}
double* A;
};
FortranArrayWrapper a(returnedArray(arraySize));
a[0] = ...; // Index 1 in the array returnedArray, ie. first element in the Fortran array.
a.A[0] = ...; // Actually index '0', unused by Fortran.
相关文章:
- 张量(多维数组)是树前瞻数据的有效存储类型吗?
- 为什么我不能将 op 结果乘以常量特征张量数组
- 在 tensorflow c++ api 中,如何从张量中保存图片或数组
- 如何将张量转换为图像数组
- C++ 数组将所有值调整相同的量
- 将shared_ptr分配给数组的偏移量
- C++ 函数返回带有偏移量的数组
- C++ 将部分数组(在某些偏移量)转换为其他类型
- 将数组的内容从偏移量写入c++向量
- 两个相同大小(和长度)的数组是否具有相同的元素偏移
- 严格的混叠警告,创建对无符号字符数组 + 偏移量的uint32_t引用
- 从偏移量中删除数组
- 更快地将数组中的数据复制到目标,同时应用缩放或偏移因子
- 取消引用运算符给出的结果与具有 void* 的数组偏移运算符不同
- 给定元素数组、子列表的偏移量和长度的有效部分约简
- 索引到信号量数组中
- 信号量数组初始化为NULL,seg错误
- OS X中的信号量数组
- c++ pthreads返回数组偏移量
- 指向成员(偏移量)的指针数组作为C++中的模板参数