C++ 如何在C/C+中调用**var+;第10.5章数字配方
我在调用此函数时遇到问题:C++ 如何在C/C+中调用**var+;第10.5章数字配方,c++,c,pointers,C++,C,Pointers,我在调用此函数时遇到问题: void powell(浮点p[],浮点**xi,整数n, 浮球ftol,内部*iter,浮球*fret, 浮动(*func)(浮动[]) 我不知道哪一个参数必须在**xi下才能运行我的代码 整个功能如下: void powell(float p[], float** xi, int n, float ftol, int* iter, float* fret, float (*func)(float[])) { void linmin(float p[],
void powell(浮点p[],浮点**xi,整数n,
浮球ftol,内部*iter,浮球*fret,
浮动(*func)(浮动[])
我不知道哪一个参数必须在**xi下才能运行我的代码
整个功能如下:
void powell(float p[], float** xi, int n, float ftol, int* iter, float* fret, float (*func)(float[]))
{
void linmin(float p[], float xi[], int n, float* fret, float (*func)(float[]));
int i, ibig, j;
float del, fp, fptt, t, *pt, *ptt, *xit;
pt = vector(1, n);
ptt = vector(1, n);
xit = vector(1, n);
*fret = (*func)(p);
for (j = 1; j <= n; j++)
pt[j] = p[j];
for (*iter = 1;; ++(*iter)) {
fp = (*fret);
ibig = 0;
del = 0.0;
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++)
xit[j] = xi[j][i];
fptt = (*fret);
linmin(p, xit, n, fret, func);
if (fptt - (*fret) > del) {
del = fptt - (*fret);
ibig = i;
}
}
if (2.0 * (fp - (*fret)) <= ftol * (fabs(fp) + fabs(*fret)) + TINY) {
free_vector(xit, 1, n);
free_vector(ptt, 1, n);
free_vector(pt, 1, n);
return;
}
if (*iter == ITMAX)
nrerror("powell exceeding maximum iterations.");
for (j = 1; j <= n; j++) {
ptt[j] = 2.0 * p[j] - pt[j];
xit[j] = p[j] - pt[j];
pt[j] = p[j];
}
fptt = (*func)(ptt);
if (fptt < fp) {
t = 2.0 * (fp - 2.0 * (*fret) + fptt) * SQR(fp - (*fret) - del) - del * SQR(fp - fptt);
if (t < 0.0) {
linmin(p, xit, n, fret, func);
for (j = 1; j <= n; j++) {
xi[j][ibig] = xi[j][n];
xi[j][n] = xit[j];
}
}
}
}
}
<代码>空鲍威尔(浮点p[]),浮点**席,int n,浮点ftol,int *ITER,浮点*FRET,浮点(*FUNC)(浮点[])
{
void linmin(float p[],float xi[],int n,float*fret,float(*func)(float[]);
int i,ibig,j;
浮点数del、fp、fptt、t、*pt、*ptt、*xit;
pt=向量(1,n);
ptt=向量(1,n);
xit=向量(1,n);
*fret=(*func)(p);
对于(j=1;j,双指针意味着函数需要指针的地址
void my_function(int **p_pointer)
{
*p_pointer = new int[42];
}
int main(void)
{
int * pointer = nullptr;
my_function(&pointer);
return 0;
}
在C++中,使用引用:可以避免双指针:
void another_function(int *& pointer)
{
pointer = new int [256];
}
int main(void)
{
int p = nullptr;
another_function(p);
return 0;
}
指针的一个主要问题是它们可以指向任何地方,一个已定义的位置或不是。测试指针的有效性很复杂,因为它取决于范围对于当前平台有效。对于引用,引用根据定义是有效的,因此无需执行有效性检查。请编辑代码并修复缩进。代码不可读。您认为读者也会知道什么?此代码来自何处?它是库的一部分吗?是否有任何文档您希望使用代码实现吗?等等。此代码来自数字公式。它的第10.5章
xi
是一个“模拟”或“参差不齐”的2D数组,指向一些指向float
的指针。请参见旧版本。注意:“*变量
”表示函数需要指针。“code>**float”表示函数需要指针的地址。