加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何将不同大小的数组传递给我的c函数?

发布时间:2020-12-16 10:14:56 所属栏目:百科 来源:网络整理
导读:我不确定这是否可行但我对这些想法持开放态度. 我有一个c功能.它对由用户定义为输入的数组进行一些计算,并生成两个输出值.我们称之为“myfunction”,它看起来像这样: void myfunction(double array1[18],double array[9],double array [2],double *output1,
我不确定这是否可行但我对这些想法持开放态度.

我有一个c功能.它对由用户定义为输入的数组进行一些计算,并生成两个输出值.我们称之为“myfunction”,它看起来像这样:

void myfunction(double array1[18],double array[9],double array [2],double *output1,double *output2)

我想使这个函数更通用,以便它能够采用不同大小的数组.意思是,我希望此函数的用户能够定义其他大小的数组输入.

例如,

void myfunction(double array1[81],double array[27],double array [3],double *output2)

在数学上,“myfunction”能够计算出精确的输出,尽管数组大小.我不想复制“myfunction”,因为用户可以将总共5种不同的数组大小定义为输入.

有任何想法吗?先感谢您

解决方法

您可以传递std :: vector或使用模板:

template <std::size_t N1,std::size_t N2,std::size_t N3> // and so on...
void work_with_arrays(double (&arr1)[N1],double (&arr2)[N2],double (&arr3)[N3]){
    std::cout << "First arr of a size: " << N1 << "n";
    std::cout << "Second arr of a size: " << N2 << "n";
    std::cout << "Third arr of a size: " << N3 << "n";
};

int main() {
    double something[32];
    double fewer[13];
    double maybe_byte[8];

    work_with_arrays(something,fewer,maybe_byte);
}

代码输出:

First arr of a size: 32
Second arr of a size: 13
Third arr of a size: 8

说明:

应该知道类型T [](T是任何类型)的参数衰减到T *.如果我们处理一个指向数组的指针,我们就没有关于它的长度的信息,这是非常不幸的,因为固定长度数组的长度在编译时是已知的,并且在我们使用它们的任何地方都可以看到.

人们还应该知道函数模板不是函数.它是用于创建函数的模板.对于上面示例中使用的每个不同的N#集合,将为我们的使用生成一个函数.

腐烂问题的解决方法是什么?

我们应该传递对T []的引用,而不是传递原始的T [].这样,类型不会衰减,并且数组的大小将是已知的.

句法?

人们可能会注意到T(& name)[some_size]至少看起来很奇怪.括号是必需的,因为普通的T& name [size]将被解释为T& name [size],它是一个引用数组,而不是对数组的引用.

结论:

能够检测传递为参数的数组的大小,我们不希望用一两种情况限制自己 – 我们想要全部覆盖它们,所以我们使用模板生成具有N#所需值的函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读