鱼C论坛

 找回密码
 立即注册
查看: 2384|回复: 14

这个问题谁能解决,拜他为师

[复制链接]
发表于 2014-8-4 13:40:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
int m=10,n=5,a[10]={1,2,3};

void f1(void){
        static int n=3;
        a[n]=a[n-1]+a[n-2]+a[n-3];
        n++;
}
void f2(int m)
{  for(;m<3;m+=2){
        int m;
        for(m=1;m<4;m++)
                printf("%d,",a[m++]);
}
}
main()
{  int i;
for(i=0;i<7;i++)   f1();
f2(1);
printf("%d,%d\n",a[m],a[n]);
}



其中 a[10]的值为什么为10

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-4 14:05:34 | 显示全部楼层
:shock:   有a[10]吗? 不是只到a[9]吗,那都出界了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-4 14:48:01 | 显示全部楼层
你调试看了么?    a[10] 这个值的初始值就是3       for循环7次 n++   得出结果是10,开始的时候也看懵了,现在还不知道为啥a[10]的初始值怎么是3……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-4 14:48:10 | 显示全部楼层
xubin2004198 发表于 2014-8-4 14:05
有a[10]吗? 不是只到a[9]吗,那都出界了吧

没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-4 14:56:44 | 显示全部楼层
hanhaochi 发表于 2014-8-4 14:48
你调试看了么?    a[10] 这个值的初始值就是3       for循环7次 n++   得出结果是10,开始的时候也看懵了 ...

这是一道考研题?
你得帮我{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-4 15:03:09 | 显示全部楼层
小灰灰58 发表于 2014-8-4 14:56
这是一道考研题?
你得帮我

是出界了,a[10]申请只能赋值  a[0] 到a[9]……静态初始值之后就不在执行 static int n = 3;  ,你在调试状态下查看内存可以看到变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-4 15:07:16 | 显示全部楼层
本帖最后由 oggplay 于 2014-8-4 15:33 编辑
小灰灰58 发表于 2014-8-4 14:56
这是一道考研题?
你得帮我


这很简单,首先我们简化一下你的程序
#include <stdio.h>

int m=10,
 
    a[10]={1,2,3};

void 
f1(void) {
     static int n=3;
     a[n]=a[n-1]+a[n-2]+a[n-3];
     n++;
     
}




int 
main(){
  int i;
  for(i=0;i<7;i++)  
     f1();
 
  printf("%p \n",&m );
 
  printf("%p %p\n",a,&a[10]);
  for(i=0;i<11;i++) printf("a[%d]=%d ",i,a[i]);
  printf("\n");
}

然后看运行结果(首先你的承认你的数组越界了,为什么呢,后边有答案。),你看0x600bb8地址,是a[10]的地址,这个是越界数组。
抓图7.png

然后开始调试。过程不讲了,最后看得到答案。这个10是谁的值呢,0x600bb8地址就是static int n,n最后的值=0x0a就是10。
抓图8.png
[\b]

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
小甲鱼 + 5 + 5 回答的非常棒!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-4 15:08:38 | 显示全部楼层
hanhaochi 发表于 2014-8-4 15:03
是出界了,a[10]申请只能赋值  a[0] 到a[9]……静态初始值之后就不在执行 static int n = 3;  ,你在调试 ...

怎么解释a[10]的值?a[11]=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-4 15:27:49 | 显示全部楼层
oggplay 发表于 2014-8-4 15:07
这很简单,首先我们简化一下你的程序

师傅能详细解答吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-4 15:32:04 | 显示全部楼层
本帖最后由 oggplay 于 2014-8-4 15:47 编辑
小灰灰58 发表于 2014-8-4 15:27
师傅能详细解答吗

a[10]已经越界,a[9]当然不越界。取m值的时候注意就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-4 17:50:45 | 显示全部楼层
楼上的都是大神啊!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-4 14:03:56 | 显示全部楼层
0/9吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-4 21:20:07 | 显示全部楼层
{  for(;m<3;m+=2){
        int m;
        for(m=1;m<4;m++)
                printf("%d,",a[m++]);

这个循环变量m不是重复定义了吗,为啥里层和外层要这么写呢,没有意义啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-4 23:36:59 | 显示全部楼层

不是重复定义的问题,允许这么写吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2020-11-7 08:40:14 | 显示全部楼层
乐乐学编程 发表于 2020-11-4 23:36
不是重复定义的问题,允许这么写吗?

阁下今年几岁啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表