PopおよびPush機能を実装するプログラムを作成しようとしています。問題は、整数のTopを指すポインタを関数に渡そうとしているため、この整数が変化し続けるが、コンパイルしようとすると常にこの行が表示されることです:
**エラー:呼び出されたオブジェクトは関数または関数ポインターではありません(* t)-
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
int Push(int stac[], int *v, int *t)
{
if((*t) == MAX-1)
{
return(0);
}
else
{
(*t)++;
stac[*t] = *v;
return *v;
}
}
int pop(int stac[], int *t)
{
int popped;
if((*t) == -1)
{
return(0);
}
else
{
popped = stac[*t]
(*t)--;
return popped;
}
}
int main()
{
int stack[MAX];
int value;
int choice;
int decision;
int top;
top = -1;
do{
printf("Enter 1 to Push the value\n");
printf("Enter 2 to pop the value\n");
printf("Enter 3 to exit\n");
scanf("%d", &choice);
if(choice == 1)
{
printf("Enter the value to be pushed\n");
scanf("%d", &value);
decision = Push(stack, &value, &top);
if(decision == 0)
{
printf("Sorry, but the stack is full\n");
}
else
{
printf("The value which is pushed is: %d\n", decision);
}
}
else if(choice == 2)
{
decision = pop(stack, &top);
if(decision == 0)
{
printf("The stack is empty\n");
}
else
{
printf("The value which is popped is: %d\n", decision);
}
}
}while(choice != 3);
printf("Top is %d\n", top);
}
エラーのある行の直前にセミコロンが1つありません。
poped = stac[*t] <----- here
(*t)--;
この奇妙なエラーの理由は、コンパイラがそのようなsthを見たことです:
poped = stac[*t](*t)--;
テーブルからの関数ポインターの呼び出しとして解釈できますが、stacは関数ポインターの配列ではなくintの配列であるため、これは明らかに意味をなしません。