Возврат указателя на структуру

Я наткнулся на пример, возвращающий структуру в «Языке программирования C» Кернигана и Ритчи.

/* binsearch: find word in tab[0]...tab[n-1] */
struct key *binsearch(char *word, struct key *tab, int n)
{
    int cond;
    struct key *low = &tab[0];
    struct key *high = &tab[n];
    struct key *mid;

    while (low < high) {
        mid = low + (high-low) / 2;
        if ((cond = strcmp(word, mid->word)) < 0)
            high = mid;
        else if (cond > 0)
            low = mid + 1;
        else
            return mid;
    }

    return NULL;
}

Кажется, что функция возвращает указатель на локальную переменную в функции; разве это не случай возврата оборванного указателя?


person Akash    schedule 08.01.2012    source источник


Ответы (3)


Нет, эта функция не возвращает указатель на локальную переменную. На самом деле в этой функции вообще нет локальных переменных типа struct key.

Эта функция возвращает указатель на один из элементов struct key из массива tab, предоставленного этой функции ее вызывающей стороной.

person James McNellis    schedule 08.01.2012

Не в этом случае, так как локальными являются только указатели, а не сами структуры, так как они передаются извне в аргументе tab.

person MByD    schedule 08.01.2012

Я думаю, вы имеете в виду код binsearch, упомянутый в page #137. Чтобы лучше понять код, вам нужно прочитать объяснение, данное в page #138.

@K&R

@The C Programming Language

@Second Edition

person Sangeeth Saravanaraj    schedule 08.01.2012