| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 469 人关注过本帖
标题:c语言局部变量,做练习题时遇到的问题
只看楼主 加入收藏
Garra耻辱
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-5-14
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:9 
c语言局部变量,做练习题时遇到的问题
#include<stdio.h>

int * sum(int a[],int b[])
{
 int *p,i,c[5];
 p=c;
 for(i=0;i<5;i++)
 {
  c[i]=a[i]+b[i];
 }
 return p;
}
int main(void)
{
 int a[5]={1,2,3,4,5},b[5]={11,4,2,7,9},i,*p=a;

 p=sum(a,b);
 printf("a[0],a[1],a[3]..a[5]:\n");
 for(i=0;i<5;i++,p++)
 {
  printf("%d,",*p);
 }
 printf("\n");
 return 0;
}
谁帮帮我,告诉我这个程序错在哪里,有人给我说是自定义函数里的局部变量释放了,但是我没能理解。
搜索更多相关主题的帖子: c语言 练习题 
2011-05-28 00:25
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:2 
程序代码:
int * sum(int a[],int b[])
{
int *p,i,c[5];
p=c;
for(i=0;i<5;i++)
{
  c[i]=a[i]+b[i];
}
return p; 
}

你返回了一个指向内部变量的指针,而这个指针是临时的。函数返回后就无效了。
2011-05-28 00:37
Garra耻辱
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-5-14
收藏
得分:0 
回复 2楼 naruto01
那如果我a[i]=a[i]+b[i];
zuihou return a;
可以吗
2011-05-28 01:28
Garra耻辱
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-5-14
收藏
得分:0 
回复 3楼 Garra耻辱
要是是你你会怎么编啊。我觉得我的想法太绕了
2011-05-28 01:30
naruto01
Rank: 4
等 级:业余侠客
帖 子:103
专家分:280
注 册:2011-5-23
收藏
得分:0 
程序出现的问题在于int c[5]数组声明在了函数体内。
那么很简单的方法就是把它声明成全局的数组,不就行了?
2011-05-28 01:42
ellie78
Rank: 2
等 级:论坛游民
帖 子:9
专家分:29
注 册:2011-5-27
收藏
得分:2 
回复 3楼 Garra耻辱
可以。
因为一旦返回,变量p就不存在了,所以指向p的指针将是无效的。有的编译器会在这种情况下给出类似"function returns address of local variable"的警告。你修改完后的代码可以编译通过。
2011-05-28 01:44
Garra耻辱
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-5-14
收藏
得分:0 
回复 6楼 ellie78
谢谢
2011-05-28 01:59
记叙、继续
Rank: 4
等 级:业余侠客
帖 子:56
专家分:226
注 册:2011-5-17
收藏
得分:2 
多检查,多对比
2011-05-28 03:56
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:2 
程序代码:
p=c;
for(i=0;i<5;i++)
{
  c[i]=a[i]+b[i];
}
return p;
}
而且这里 你的p在前面把c赋给它 首先c就没有初值 所以p也是不定的随着函数调用c不固定p就不固定  后面进行数组运算 也没有给p再次赋值 p保持原值
2011-05-28 07:19
coolsonic
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2011-5-28
收藏
得分:2 
一句话:不要返回指向临时变量的指针。
改法:你把数组C作为参数直接传进去就行了。
2011-05-28 09:08
快速回复:c语言局部变量,做练习题时遇到的问题
数据加载中...
 
   



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

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