【发布时间】:2016-02-13 19:00:48
【问题描述】:
我是 C 新手,我试图从某些值(px 和 py)计算动能,但我的例程总是指责主要错误 下标值既不是数组也不是指针向量也不是。任何人都可以帮助我,因为我知道我已经尝试过。
动力学函数出现错误
谢谢
我的日常
#include <stdio.h>
#include <stdlib.h>
#ifndef RAN2_H_
#define RAN2_H_
void UniformBox(long, long *, double, double, double *, double *, double *, double *);
void kinetic(long, double, double, double);
#endif /* RAN2_H_ */
#include "ran2.h"
float ran2(long*);
void UniformBox(long n, long *idum, double L, double p0, double *rx, double *ry, double *px, double *py){
long i;
for(i = 0 ; i < n ; i++){
rx[i] = ((double)ran2(idum))*L;
ry[i] = ((double)ran2(idum))*L;
px[i] = ((double)ran2(idum) -.5)*2*p0;
py[i] = ((double)ran2(idum) -.5)*2*p0;
}
return;
}
void kinetic(long n, double x, double y, double kint){
long i;
for(i = 0 ; i < n ; i++){
kint[i] = (x*x)+(y*y);
}
return;
}
void UniformBox(long, long *, double, double, double *, double *, double *, double *);
void kinetic(long n, double x, double y, double kint);
int main(){
long i, n, seed, idum;
double *rx, *ry, *px, *py;
double L, p0, kint;
n = 1000;
L = 2.0;
p0 = 1.22;
seed = 10;
idum = -seed;
FILE *init = fopen("initialPosition.dat", "w");
rx = (double *) malloc((double) n * sizeof(double));
ry = (double *) malloc((double) n * sizeof(double));
px = (double *) malloc((double) n * sizeof(double));
py = (double *) malloc((double) n * sizeof(double));
UniformBox(n, &idum, L, p0, rx, ry, px, py);
kinetic(n, px, py, kint);
for(i = 0 ; i < n ; i++){
printf("%lf\t%lf\t%lf\t%lf\t%lf\n", rx[i], ry[i], px[i], py[i], kint[i]);
fprintf(init,"%lf\t%lf\t%lf\t%lf\n", rx[i], ry[i], px[i], py[i]);
}
fclose(init);
free(rx);
free(ry);
free(px);
free(py);
return 0;
}
【问题讨论】:
-
错误信息带有行号;请标记有问题的行。这似乎也是一个语法错误,所以可能不需要发布整个程序。
-
错误也很明显:
kint是一个标量double,不能用[]下标。如果您希望kint成为一个数组,请将其视为您在main中定义的其他双精度数组。
标签: c pointers function-pointers