我的程序非常简单,我得到的错误如下:
conflicting type of 'f'
previous declaration of 'f' was here
error : initializer element is not computable at load time
in function queue_ready:
invalid type argument of unary '*' (have'int')
in function dequeue_ready :
invalid type argument of unary '*' (have'int')
我的错误在哪里?
#include<stdio.h>
int Queue_ready[1000];
int *r ;
int *f ;
r=&Queue_ready[0];
f=&Queue_ready[0];
void queue_ready (int process)
{
*r=process;
r = r+1;
}
void dequeue_ready (void)
{
*f = 10000;
f=f+1;
}
int main()
{
queue_ready(1);
queue_ready(2);
printf("%d %d" , Queue_ready[0] ,Queue_ready[1]);
dequeue_ready();
dequeue_ready();
return 0;
}
答案 0 :(得分:10)
问题在于:
int *r;
int *f;
r=&Queue_ready[0];
f=&Queue_ready[0];
这些行位于函数之外。前两个是好的,因为它们声明变量,但接下来的两个不是因为它们是语句,并且在函数之外不允许使用语句。
您遇到“冲突类型”错误的原因是因为语句(编译器不期望)被读作声明。由于此“声明”未指定类型,因此它具有隐含类型int
,它与类型int *
的先前定义冲突。
因为您实际想要做的是初始化这些变量(而不是赋值),所以在声明它们时会这样做:
int *r = &Queue_ready[0];
int *f = &Queue_ready[0];