| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2799 人关注过本帖
标题:C语言函数返回数组名
取消只看楼主 加入收藏
Cking
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-9-23
收藏
 问题点数:0 回复次数:2 
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编辑过]

搜索更多相关主题的帖子: C语言 函数 
2007-10-30 17:23
Cking
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-9-23
收藏
得分:0 
洗耳恭听!

2007-11-01 16:46
Cking
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-9-23
收藏
得分:0 
非常感谢!由于数组名是常量指针所以数组的第一个元素没有变,还是A,栈里后面的空间被printf给占了,所以是乱码

[此贴子已经被作者于2007-11-2 23:40:02编辑过]



2007-11-02 14:04
快速回复:C语言函数返回数组名
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028630 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved