改变变量值的指针

时间:2015-11-06 19:39:24

标签: c pointers

我将三个数字传递给我的程序,让我说6 2 8我有函数,它会以这些数字的间隔生成随机数,例如

1 number = 0<= number <=6
2 number = 0<= number <=2
3 number = 0<= number <=8

我声明了它的功能正常

double random(int a)
{
    srand((unsigned int)time(NULL));

    double rnd = (((double)rand()/(double)(RAND_MAX)) * a);
    return rnd;
}

然后我有最后的号码让我们说10 我想做的是从前两个数字的间隔中随机生成数字=来自

1 number = 0<= number <=6
2 number = 0<= number <=2

我这样做

 podiel_one=random(m_one);
 podiel_two=random(m_two);
podiel_three= getlast(m_three,podiel_one,podiel_two,m_final,m_one,m_two);

(我将所述数字扫描成变量,因此m_one = 6,m_two = 2,m_three = 8,m_final = 10) 然后我用简单的数学找到最终的数字

podiel_three = m_final-(podiel_one + podiel_two )

这工作正常,但我想修复案例,当最终数字不是来自其间隔(0 <=数字&lt; = 8) 我已经为它做了功能

double getlast(double m_three,double* podiel_one,double* podiel_two,double m_final,double m_one,double m_two){

double testt=(podiel_one+podiel_two);
double tmp_three=m_final-testt;

if(tmp_three>=0 && tmp_three <= m_three){
    return tmp_three;
}
else{
    *podiel_one=random(m_one);
    *podiel_two=random(m_two);
    getlast(m_three,podiel_one, podiel_two,m_final,m_one,m_two);
}
return 1;
}

如果最终数字不是来自其间隔,则此函数执行以下操作:它将新的随机值分配给变量并一次又一次地进行数学运算,直到所述数字来自间隔。问题是当我尝试编译它时抛出错误和警告/错误

 invalid operands to binary + (have 'double *' and 'double *')
 |error: incompatible type for argument 3 of 'getlast'
 error: incompatible type for argument 2 of 'getlast
 note: expected 'double *' but argument is of type 'double'|

现在已经失去了C语言的新功能,我该如何修复它并使我的程序正常工作?

2 个答案:

答案 0 :(得分:0)

我认为podiel_onepodiel_two被声明为double

double podiel_one, podiel_two;

所以当你致电getlast时,你需要传递那些地址:

podiel_three= getlast(m_three, &podiel_one, &podiel_two, m_final, m_one, m_two);

然后在getlast中,您尝试将2个指针添加到一起,这不是您想要的。您需要使用指针来获取它们指向的值:

double testt = *podiel_one + *podiel_two;

答案 1 :(得分:0)

您对指针执行的操作和对指向的值执行的操作感到困惑。指针代表并在内存中寻址。添加到指针会计算地址与指针指向的地址的偏移量。这仅在指针表示数组中的位置时才有用。在您的情况下,您希望对指向的值执行这些操作。也就是说,而不是

double testt=(podiel_one+podiel_two);

你想要

double testt=(*podiel_one+*podiel_two);