一个简单的C语言问题,为什么加了几个废形参以后结果就不一样了??

[复制链接]
查看11 | 回复5 | 2012-2-6 18:39:08 | 显示全部楼层 |阅读模式
这个问题,在return b时因为b是局部变量,函数执行后,b的变量就失效了。但是返回的是b的内存地址,该地址后面是什么都不清楚,所以会显示乱码。如果加了形参这些参数在程序初始化时会分配地址给他这些的分配会影响内存地址原来的值,做了这些分配,也许刚好输出那个地址时,有清0过。所以当显示b[]那个地址时就正确。解决方法:你可以将char b[4]="";放在main的前面。...
回复

使用道具 举报

千问 | 2012-2-6 18:39:08 | 显示全部楼层
不应该啊,我用VC测试第二段代码正常。#include char* f(char a[]){int i;char b[4]="";for(i=0;i<3;i++){b=a;}return b;}int main(){char a[4]="abc";puts(f(a));...
回复

使用道具 举报

千问 | 2012-2-6 18:39:08 | 显示全部楼层
这个程序是有问题的,b数组是局部参数,当他所在的函数返回以后,他的值也就没有意义了(虽然里面的数据仍然是你要得,因为你没改变),可以从汇编入手,跟踪一下...
回复

使用道具 举报

千问 | 2012-2-6 18:39:08 | 显示全部楼层
那不是废物形参0,3,3int start,int len,int lenA这题真够阴的...
回复

使用道具 举报

千问 | 2012-2-6 18:39:08 | 显示全部楼层
我这里也是上面一段代码不正常,不知道什么原因...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行