Я не знаю, почему указатели используются по-разному для функций - PullRequest
0 голосов
/ 15 апреля 2019

Я не знаю концепции указателя, поэтому спрашиваю. Я не знаю, почему указатели используются по-разному для функций.

int is_full(StackType *s)
{
    return (s->top == (MAX_STACK_SIZE -1)); 
}
void push(StackType *s, element item)
{
    if (is_full(s)) {
        fprintf(stderr, "error\n");
        return;
    }
    else {
        s->data[++(s->top)] = item;
    }   
}
int main()
{
    StackType s;

    init_stack(&s);
    push(&s, 1);
    push(&s, 2);
    push(&s, 3);

    printf("%d\n", pop(&s));
    printf("%d\n", pop(&s));
    printf("%d\n", pop(&s));
}

В первой функции я установил is_full(StackType *s) Во второй функции я установил push(StackType*s, element item)

Второй вызов функции if (is_full(s)) Основные звонки push(&s, 1)

Это та же функция, но почему она отличается от вызова?

Ответы [ 2 ]

4 голосов
/ 15 апреля 2019

Тип переменной s в функции main равен StackType.

Тип переменной s в функции is_full равен StackType*.

0 голосов
/ 15 апреля 2019

Несмотря на то, что goodvibration верен в своем ответе, также важно знать, что то, что вы передаете с &, является адресом StackType, который содержится в *s - переменной-указателе, содержащей переданный ей адрес таким образом, разрешая операции с памятью (например, те, которые выполняются в случае else)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...