2016-08-17 68 views
-1

我尝试将许多值插入队列并删除队列中的第一个值。 但是,当我想要在删除值后打印队列时出现错误。错误:调用的对象不是函数或函数指针

有我的代码:

char queue[100]; 
int i=-1; 

int *delete_queue(int value){ 

    int j; 
    for(j= 0; j< 10; j++){ 
    queue[j]= queue[j+1]; 
    } 

    return queue; 

} 

void insert_queue(int value){ 

    i= i + 1; 
    queue[i] = value; 

} 

void print_queue(int *p){ 

    int v; 
    for(v =0; v < 5; v++){ 
     printf(">> %d \n", *p(v+1)); 
    } 

} 

int main(int argc, char const *argv[]) 
{ 
    //int v ; 
    int *new_queue; 
    insert_queue(33); 
    insert_queue(22); 
    insert_queue(11); 

    new_queue= delete_queue(33); 
    print_queue(new_queue); 
    // for(v =0; v < 5; v++){ 
    // printf(">> %d \n", *new_queue(v+1)); 
    // } 

return 0; 
} 

的错误是:

delete_queue_test.c: In function ‘print_queue’: 
delete_queue_test.c:33:23: error: called object ‘p’ is not a function or 
function pointer 
printf(">> %d \n", *p(v+1)); 
       ^

请帮我解决它,谢谢。

+0

我认为你的意思是'p [v]'而不是'* p(v + 1)'。顺便说一句,有一个全局变量叫'我'是一个坏主意。像'queue_count'或'queueIndex'会更好。 – user3386109

+1

谢谢!它可以工作,也可以是*(p + v)。我还有另一个问题,就是'char queue [100];'。我将'char queue [100];'切换到'int queue [100];' – Whatlahuhu

回答

1
  • 返回int*char*(来自char queue[100]转换)转换是坏的。使用int作为queue的元素。
  • 由于错误消息提示*p(v+1)无效,因为p是指向非函数的指针,而是int,所以函数调用运算符()不能用于它。要访问p的第v个元素,您可以使用p[v]
相关问题