gpt4 book ai didi

c++ - 如何修改数组指针并将其作为参数传递给需要数组作为参数的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:15 26 4
gpt4 key购买 nike

这可能是一个初学者问题。例如,在下面的方法中,我们使用数组 alpha 和 theta,它们作为参数传递给函数 gsl_ran_dirichlet,函数计算新的 theta 值并更新相同的数组 theta

现在的问题是,我将无法按照以下代码片段在类中初始化 theta。相反,我将不得不使用指向数组 thetaalpha 的指针。我如何将这些数组指针作为参数传递给方法 gsl_ran_dirichlet

我知道不可能将指针作为参数传递给需要数组作为参数的方法。但实现此目的的最佳方法是什么(假设我们无法修改 gsl_ran_dirichlet)?

void test (){
double alpha[2] = { 1, 1};
double theta[2] = { 1, 1};

const gsl_rng_type * T;
gsl_rng * r;

gsl_rng_env_setup();

T = gsl_rng_default;
r = gsl_rng_alloc(T);

gsl_ran_dirichlet(r, 2, alpha, theta);
cout << theta[0] << "," << theta[1] << endl;

gsl_rng_free(r);
}

结果:

0.4,0.6

现在,我还在下面的代码中添加函数和错误,其中数组是动态加载的:

void test() {
double *alpha, *theta;

alpha = new double[3];
theta = new double[3];

for(int i=0; i<3; ++i){
alpha = 1;
theta = 1;
}

const gsl_rng_type * T;
gsl_rng * r;

gsl_rng_env_setup();

T = gsl_rng_default;
r = gsl_rng_alloc(T);

gsl_ran_dirichlet(r, 3, alpha, theta);
cout << theta[0] << "," << theta[1] << "," << theta[2] << ":";

gsl_rng_free(r);
}

错误:

../test.cpp:56:11: error: invalid conversion from ‘int’ to ‘double*’ [-fpermissive]
../test.cpp:57:11: error: invalid conversion from ‘int’ to ‘double*’ [-fpermissive]
make: *** [test.o] Error 1

最佳答案

一般:

  • 变量到指针:&variable
  • 指向变量的指针:*pointer

具体:

数组的名称和指向数组的指针可以以相同的方式使用,即 theta[0]pointer_to_theta[0] 是等价的。

int foo[2] = { 1, 2 };

int * pointer_to_foo = foo;

assert( foo[1] == pointer_to_foo[1] );

关于c++ - 如何修改数组指针并将其作为参数传递给需要数组作为参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25380368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com