C语言函数返回数组名
#include <stdio.h>char * fun()//子函数返回一个在其内部定义的一个数组名
{
char str[5];
for(int i=0;i<5;i++)
str[i]=65+i;
return str;
}
1:第一个main函数:
main()
{
char *p, a[5];
int i;
p=fun();//返回值数组名给指针P;
for(i=0;i<5;i++)
a[i]=*(p+i);//把指针P指的内容一一赋给数组a[];
for(i=0;i<5;i++)
printf("%c\n",a[i]);
return 0;
}
2:第一个main函数:
main()
{
char *p;
int i;
p=fun();//返回值数组名给指针P;
for(i=0;i<5;i++)
printf("%c\n",*(p+i));
return 0;
}
1的输出为:ABCDE;
2的输出为:AXXXX; X代表乱码
我认为子函数返回一个在其内部定义的数组名,应为数组名是常量,所以指针p可以得到这个数组的首地址。但是返回后,除了数组的第0个元素外,其他4个元素都应该消失。那为什么第1个main()还输出了所有元素?
那第个main()函数为什么输出值不一样啊?为什么都定义一个数组然后在把p的指向改变,就不会有乱码?
谢谢啊!
[此贴子已经被作者于2007-10-30 17:27:30编辑过]