请教,数组和指针的问题!

Arousal_Fish 2008-04-25 12:07:24

#include "stdio.h"
#include "conio.h"

void readFile(int code[128]){
FILE *fp;
char ch;
if((fp=(fopen("D:\mugen.txt","r")))==NULL){
printf("cannot open file!\n");
return;
}
while((ch=fgetc(fp))!=EOF){
code[ch]++;
}
fclose(fp);
}

int *readFileReturnArray(){
FILE *fp;
char ch;
int code[128]={0};
if((fp=(fopen("D:\mugen.txt","r")))==NULL){
printf("cannot open file!\n");
return NULL;
}
while((ch=fgetc(fp))!=EOF){
code[ch]++;
}
fclose(fp);
return code;
}

main(){
int i=0;
int code[128]={0};
int *p;
readFile(code);
for(;i<128;i++){
if(code[i]!=0){
printf("char:%c appears times:%d\n",i,code[i]);
}
}
printf("---------------------------------------");
p=readFileReturnArray();
for(i=0;i<128;i++){
if(p[i]!=0){
printf("char:%c appears times:%d\n",i,p[i]);
}
}
getch();
}


为什么readFile()和readFileReturnArray()两个函数得到的结果不同呢?
...全文
129 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
有问题请先GOOGLE,BAIDU
Arousal_Fish 2008-04-28
  • 打赏
  • 举报
回复
谢谢楼上几位啦
但是
第二个函数的结果只是在第一个的基础上多出了一些其他文件中不存在的字符
那些字符是怎么来的呢,随机?似乎不是,因为每次运行都是一样的结果
Arousal_Fish 2008-04-28
  • 打赏
  • 举报
回复
但为什么第一个函数出现的字符次数在第二个显示也是一样的呢?
lixun_21 2008-04-25
  • 打赏
  • 举报
回复
readFile(int code[128]);//这个函数是通过数组名来传递字符串
//由于code是在main函数里定义的 所以它的作用域在main函数范围有效;所以能正常使用!
*readFileReturnArray();//这是个指针函数 楼主的意图是通过返回值来传递字符串
//但是里面定义的int code[128]是局部变量 保存在栈区 函数一结束 将会从栈中移出
//code[]的内容 也就不能使用了
Arousal_Fish 2008-04-25
  • 打赏
  • 举报
回复
是不是存储空间的问题呢?
薛勇 2008-04-25
  • 打赏
  • 举报
回复
sf
关注
zhaoyg1986 2008-04-25
  • 打赏
  • 举报
回复
readFileReturnArray中的code数组是自动变量,当函数结束后其空间也就被自动释放了,故而也就不能返回code的地址了
eduhf_123 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lixun_21 的回复:]
readFile(int code[128]);//这个函数是通过数组名来传递字符串
//由于code是在main函数里定义的 所以它的作用域在main函数范围有效;所以能正常使用!
*readFileReturnArray();//这是个指针函数 楼主的意图是通过返回值来传递字符串
//但是里面定义的int code[128]是局部变量 保存在栈区 函数一结束 将会从栈中移出
//code[]的内容 也就不能使用了
[/Quote]局部变量作用域……
xiaolinxianju 2008-04-25
  • 打赏
  • 举报
回复
把void readFile(int code[128])这一句改为void readFile(int code[])或者改为void readFile(int *code),因为你在主函数中传递的是数组名,数组名代表的是数组的首地址,也就是说你传递的是地址,因此在被调用的函数中声明的变量必须为指针变量。
lala_benben 2008-04-25
  • 打赏
  • 举报
回复
....是不一样。。。返回的都是随机的值
sxsong_04 2008-04-25
  • 打赏
  • 举报
回复
同意楼上,可以用int* code = new int[128]来解决。
Soulic 2008-04-25
  • 打赏
  • 举报
回复
变量的作用域问题,readFileReturnArray()函数中的数组变量在退出函数后就不存在了
lovelyday 2008-04-25
  • 打赏
  • 举报
回复

int *readFileReturnArray()中定义的int code[128],保存在栈中,返回的是局部变量,函数调用结束后,局部变量也就释放了,可将int code[128]改为int *code

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧