2016-08-17 80 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]
相關問題