Как вернуть символьный указатель? - PullRequest
0 голосов
/ 30 января 2019

Я новичок в C. Я пытаюсь вернуть символьный указатель >> Указатель, который указывает на однозначное значение.Я знаю, что могу просто вернуть символ, но я хочу научиться возвращать указатель символа, указывающий на однозначное значение.

char * returnPointerToCharacter(){
    char s = 's';
    char * pointerToS = &s;
    return pointerToS;
}

int main()
{
//         This code below works  
    char h = 'h';
    char * pointerToH = &h;
    printf("%c \n", *pointerToH);

//         This code below doesn't work                
    char * pointerToS = returnPointerToCharacter();
    printf("%c \n", *pointerToS);

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Я пытаюсь вернуть указатель на символ

Ваш код возвращает возвращает указатель на символ.Но он также совершает кардинальный грех: он возвращает указатель на объект, время жизни которого заканчивается завершением вызова функции.Поэтому результирующий указатель бесполезен для вызывающей стороны.

Есть несколько альтернатив.Часто, если кто-то собирается вернуть указатель, он динамически распределяет объект, на который он указывает.Динамически размещенные объекты живут до тех пор, пока они не будут явно освобождены.Однако для ваших конкретных целей я бы предложил сделать локальную переменную функции static, что в точности означает, что она живет и сохраняет свое последнее установленное значение на протяжении всей жизни программы:

char * returnPointerToCharacter(){
    static char s = 's';

    return &s;
}
0 голосов
/ 30 января 2019

Проблема в том, что char s находится в стеке и извлекается из стека, поэтому вы возвращаете указатель на разрушенный элемент.

Если вам просто нужна функция, которая возвращает указатель на символ, вы можете попробовать что-то простое:

char * returnPointerToCharacter(char *s){
    return s;
}
...// Do stuff
char f;
char * pointerToS = returnPointerToCharacter(&f);
...