c/c++中数组名是不是不可以做为一个指针返回?

我问题如下:
输入字符后,运行结果为乱码
#include
char* copy(char* p)
{
int j=0;
char a[100];
for (int i=0;i<13;i++)
{
if(p[i]!=' ')
a[j++]=p[i];
else
continue;
}

return a;

}
int main()
{
using namespace std;
char a[13];
char t[100];

cin>>a;


cout<<copy(a);
return 0;

}

不要返回局部指针,数组a是局部的

数组名不是指针,它仅仅是个 地址常量

数组名可以做为一个指针返回,这个没问题,但问题是:

你得把a定义成静态变量或者全局变量,才能直接在函数里return它,局部变量在函数返回时就被销毁了,肯定是乱码,甚至程序会崩溃掉。

char* copy(char* p)
{
    static char a[100];    // 静态变量
        ...
        return a;
}

或者

char a[100];    // 全局变量

char* copy(char* p)
{
        ...
        return a;
}

可以返回数组,不过你要在堆上分配数组。同时找时机释放。

  • 从个人的经验来看,这个是可以的。前面的大侠们忽略了一个问题。对于如题的函数,他的数组是在编译的时候就已经分配好空间的,并不是运行时分配。而这个空间在程序退出之间也不会被销毁。
  • 但是,这是一个不好的习惯。因为在你使用返回的指针前,一次误调用会使你的返回值发生改变。