C 错误:表达式必须是指向完整对象类型的指针

C 错误:表达式必须是指向完整对象类型的指针,c,compiler-errors,mpi,C,Compiler Errors,Mpi,我正在尝试用C编写MPI程序。当我尝试编译它时,请使用: mpicc -o hw2_b1 hw2_b1.c 发生错误: int main(int argc, char **argv){ MPI_Init(&argc, &argv); int N=atof[argv[1]]; int *A, *Ap; A=malloc(sizeof(int)*(N*N)); Ap=malloc(sizeof(int)*(N*N)); initialize_data(A, Ap, N); sc

我正在尝试用C编写MPI程序。当我尝试编译它时,请使用:

mpicc -o hw2_b1 hw2_b1.c
发生错误:

int main(int argc, char **argv){
MPI_Init(&argc, &argv);
int N=atof[argv[1]];
int *A, *Ap;
A=malloc(sizeof(int)*(N*N));
Ap=malloc(sizeof(int)*(N*N));

initialize_data(A, Ap, N);

scatter_data(A, N);
mask_operation(A, N, Ap);
gather_results(Ap, N);

MPI_Finalize();
return 0;
} 这是我第一次使用atof()函数,所以我不知道是什么问题,即使我将N的类型更改为double,错误仍然存在。 有什么帮助吗?非常感谢。 错误粘贴在下面:

hw2_b1.c(140): error: expression must be a pointer to a complete object type
    int N=(int)atof[argv[1]];
               ^
hw2_b1.c(140): error: expression must have integral type
        int N=(int)atof[argv[1]];
                        ^
compilation aborted for hw2_b1.c (code 2)

atof
是一个函数,您必须使用括号
()
作为参数列表,而不是索引运算符
[]
。更改
N=atof[argv[1]
N=atof(argv[1])。除此之外,
atof
还将字符串转换为浮点数据类型(
float
)。您的目标数据类型是
int
。使用
atoi
将字符串转换为整数数据类型。调整您的代码,如下所示:

int N = atoi( argv[1] );
//         ^^         ^

而不是方形制动器

int N=(int)atof[argv[1]];
               ^^      ^^
你必须用括号

int N=(int)atof(argv[1]);
               ^^      ^^

另外,您确定需要使用函数
atof
而不是
atoi
,将结果分配给
int
类型的对象吗?

atof[argv[1]-->atof(argv[1])您知道
atof
中的
f
代表浮点吗?如果你想转换成整数,为什么不使用
atoi
?另外,如果你出错,额外的校对总是有帮助的。哦,天哪,我终于找到问题了。这是我的错!谢谢这只是一个模板,我必须使用atof(),谢谢。哦,谢谢!是我的错,是打字错误。还是谢谢你。