如何返回字符指针?

时间:2019-01-30 16:24:31

标签: c pointers character

我是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 :(得分:1)

问题在于char s在堆栈中,并从堆栈中弹出,因此您要返回指向被破坏元素的指针。

如果只想返回一个char指针的函数,则可以尝试一些简单的方法:

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

答案 1 :(得分:0)

  

我正在尝试返回字符指针

您的代码确实返回一个字符指针。但是它也犯了一个主要的罪过:它返回一个对象的指针,该对象的生命期在函数调用完成时结束。因此,生成的指针对调用者无用。

有几种选择。通常,如果要返回一个指针,则动态分配它要指向的对象。动态分配的对象一直存在,直到显式释放它们为止。但是,出于您的特定目的,我建议您制作函数的局部变量static,这恰恰意味着它在程序的整个生命周期中都将生存并保留其最后设置的值:

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

    return &s;
}