请记住,我是指针的新手。
我想要完成的是每次迭代这个for循环时value
增加一个double值(在这种情况下,.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;
}
不起作用的驱动程序代码示例(我只提供此代码以便我可以更好地传达我想要完成的内容):
double dataValue = 3.54;
double* currentData = &dataValue;
fill_array(begin, end, *currentData+.013);
当然,存储在数组中的所有值都是3.553。
我是否需要创建一个带有返回值的函数作为参数传递给形式参数&#39; value&#39;?或者这可以仅使用指针完成?
答案 0 :(得分:1)
只需在每次迭代中递增值:
for( ; begin < end; begin++) {
*begin = value == 0.0 ? 0.0 : value;
value += 0.013;
}
如果你想要0.013为动态,你应该为你的函数添加另一个参数(例如double incrementer
)。
答案 1 :(得分:1)
每次迭代此for循环时,值会增加一个double值(在本例中为.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_array(double* begin, double* end, double& value) {
for( ; begin < end; begin++)
*begin = value;
value += 0.13;
}
fill_array(begin, end, *currentData);
答案 2 :(得分:0)
您无法使用fill_array函数执行此任务。但是你可以专门为这个任务重载它。例如
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 );
它会像你想要的那样表现。