C++ c++;

C++ c++;,c++,pointers,arguments,C++,Pointers,Arguments,请记住,我对指针是全新的 我试图实现的是每次迭代for循环时,value增加一个双倍值(在本例中为.013): /*********************************************************************************** @name: fill_array @purpose: fill all elements in range 'begin' to 'end' with 'value' @param: dou

请记住,我对指针是全新的

我试图实现的是每次迭代for循环时,
value
增加一个双倍值(在本例中为.013):

/***********************************************************************************
@name:      fill_array

@purpose:   fill all elements in range 'begin' to 'end' with 'value'

@param:     double* begin   address of first element of the array range

@param:     double* end     address of the next byte past the end of the array range

@param:     double  value   the value to store in each element

@return:    void
***********************************************************************************/

void fill_array(double* begin, double* end, double value) {

    for( ; begin < end; begin++)
        *begin = value == 0.0 ? 0.0 : value;
}
当然,数组中存储的所有值都是3.553


我是否需要创建一个返回值作为参数传递到形式参数“value”中的函数?或者这可以只使用指针来完成吗?

只需在每次迭代中增加值:

for( ; begin < end; begin++) {
    *begin = value == 0.0 ? 0.0 : value;
    value += 0.013;
}
(;begin{ *开始=值==0.0?0.0:值; 数值+=0.013; } 如果您不希望0.013是一个动态变量,则应该向函数中添加另一个参数(例如,
双递增器

每次迭代此for循环时,值都会增加一个双倍值(在本例中为.013):

那么,
value
是调用者提供的函数参数,因此调用者可以这样修改它:

fill_array(begin, end, *currentData += .013);
如果您不希望调用代码修改该值,那么您必须进行一些其他更改,因为给定

fill_array(begin, end, *currentData+.013);
…为
value
参数提供了一个临时的添加结果,并且
fill_array
无法请求控制的非临时变量可以添加到它并查看对下一次调用的影响。这可以通过几种方式解决,使用指针

void fill_array(double* begin, double* end, double* p_value) {
    for( ; begin < end; begin++)
        *begin = *p_value;
    *p_value += 0.13;
}
fill_array(begin, end, currentData);
void fill_数组(双*开始、双*结束、双*p_值){
对于(;begin
…或使用引用

void fill_array(double* begin, double* end, double& value) {
    for( ; begin < end; begin++)
        *begin = value;
    value += 0.13;
}
fill_array(begin, end, *currentData);
void fill_数组(双*开始、双*结束、双值和值){
对于(;begin
您不能使用函数填充数组来执行此任务。但是你可以专门为这项任务重载它。比如说

void fill_array( double *begin, double *end, double init, double incr ) 
{
    init = init == 0.0 ? 0.0 : init;

    if ( begin != end ) 
    {
        *begin = init;

        while ( ++begin != end ) *begin = init += incr;
    }
}
void fill_array( double *begin, double *end, double init, double incr = 0.0 ) 
{
    init = init == 0.0 ? 0.0 : init;

    if ( begin != end ) 
    {
        *begin = init;

        while ( ++begin != end ) *begin = init += incr;
    }
}
或者,如果将最后一个参数定义为具有默认参数,则您甚至只能有一个函数。 比如说

void fill_array( double *begin, double *end, double init, double incr ) 
{
    init = init == 0.0 ? 0.0 : init;

    if ( begin != end ) 
    {
        *begin = init;

        while ( ++begin != end ) *begin = init += incr;
    }
}
void fill_array( double *begin, double *end, double init, double incr = 0.0 ) 
{
    init = init == 0.0 ? 0.0 : init;

    if ( begin != end ) 
    {
        *begin = init;

        while ( ++begin != end ) *begin = init += incr;
    }
}
所以如果你把它叫做

fill_array( begin, end, 3.54 );
它将作为您的原始功能

如果你称之为

fill_array( begin, end, 3.54, 0.13 );

它将按照您试图实现的方式运行。

您没有做任何事情来增加
值。此外,三元运算符赋值似乎毫无意义。与
*begin=value相同。此外,函数的文档与您描述的您尝试执行的操作非常不一致。我可能应该在函数原型中将默认参数设置为0.0作为值。我知道如何通过修改函数来实现这一点。我希望能够将动态参数传递到值中。我试图完全避免更改函数。我想知道如何从函数外部完成此操作。AFAIK不更改函数是不可能的。fill_array()的目的是用相同的精确值填充所有元素。我试图通过一些动态参数在每次迭代中设置不同的增量值,而不改变函数。我只是好奇这是否可能。@user3548076:噢。。。正如您所说,
fill\u array
设计用于将所有的双精度设置为该值,“在不改变函数的情况下”,函数不会改变。不可能。
double
类型的参数不是,也不能在任何相关意义上成为“动态”参数。只需更改
value
参数的用户定义类型,
fill_array
就可以像前面所讨论的那样,每次使用
value
时,它都会自我递增(例如
操作符double(){return n_+=0.13;}
)。类似地,
template void fill_array(double*begin,double*end,T&value)
允许足够的自由度。函数执行函数中的代码所执行的操作。如果不更改代码,则无法更改函数的功能。。。