返回函数局部指针的问题

下面举个例子
char* get_user_name(){
            char username[]="abc";//赋值语句
            return username;
}
这函数返回值是有问题的, 因为在函数体内定义了临时变量,它的值随函数返回后而销毁。
但是这样却是正常的
char* get_user_name(){
                char *username="abc";//先在静态区定义abc/0这个字符串,然后才用指针指向它。
                return username;
}

它是在静态区上开辟的内存。所以能返回。(abc必需有一个地方存放,不然指针就没办法指向它。所以这一句不单是赋值)


如果要返回在函数内部定义的局部指针,我们一定要搞清以下的问题。
第一:函数返回指针值应是返回指针变量里保存的地址,而不是指针变量本身。
第二:在函数内部定义的栈中值是不能返回的,堆、静态区中的值则可以返回。
第三:在函数内定义的局部指针,都是在栈区声明的,但可以指向栈区、堆区和静态区。是否能返回由指针的指向决定。只要不是指向栈区的,都能返回。
第四:指针参数用传址方式传入,就必需在函数中定义了一个局部的指针。
第五:在函数内使用全局指针时,一定要先定义一个局部的指针,然后把全局指针赋给局部指针。作为一个原则,全局指针不应在函数内部重新指定它的指向。所以使用const int声明一个全局的整型指针比用int定义一个全局指针要安全。


相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页