#c
#c
Вопрос:
Я не знаю понятия указателя, поэтому спрашиваю. Я не знаю, почему указатели используются по-разному для функций.
int is_full(StackType *s)
{
return (s->top == (MAX_STACK_SIZE -1));
}
void push(StackType *s, element item)
{
if (is_full(s)) {
fprintf(stderr, "errorn");
return;
}
else {
s->data[ (s->top)] = item;
}
}
int main()
{
StackType s;
init_stack(amp;s);
push(amp;s, 1);
push(amp;s, 2);
push(amp;s, 3);
printf("%dn", pop(amp;s));
printf("%dn", pop(amp;s));
printf("%dn", pop(amp;s));
}
В первой функции я устанавливаю is_full(StackType *s)
Во второй функции я устанавливаю push(StackType*s, element item)
Вторая функция вызывает if (is_full(s))
основные вызовы push(amp;s, 1)
Это одна и та же функция, но почему ее вызов отличается?
Комментарии:
1. In
push
,s
уже является указателем. Вmain
нем находится объект (структура).
Ответ №1:
Тип переменной s
в функции main
равен StackType
.
Тип переменной s
в функции is_full
равен StackType*
.
Комментарии:
1. Ооо… Большое вам спасибо
Ответ №2:
Хотя goodvibration верен в своем ответе, также важно знать, что вы передаете amp;
адрес в StackType , который является *s
переменной указателя, хранящейся внутри — a, содержащей переданный ей адрес, что позволяет выполнять операции с памятью (например, те, которые выполняются в else
случае)