c - 指针改变变量的值

标签 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 <= 数字 <=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 语言的新手,我现在迷路了,我该如何修复它并使我的程序运行?

最佳答案

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

double testt=(podiel_one+podiel_two);

你想要

double testt=(*podiel_one+*podiel_two);

关于c - 指针改变变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574415/

相关文章:

c - C 数组的结构如何

c - 根据用户输入确定颜色

c++ - 函数指针的取消引用是如何发生的?

c - C语言的求值顺序

android - 在 Android 中使用图像和音频创建视频

c - 与共享库链接

C++基类指针调用子虚函数,为什么基类指针能看到子类成员

java - java引用变量存储在哪里?

objective-c - Objective C 中的 C 指针的内存管理如何工作

c++ - 0xC0000005 : Access violation reading location 0x00000004