小灰灰58 发表于 2014-8-4 13:40:57

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

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

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



其中 a的值为什么为10

xubin2004198 发表于 2014-8-4 14:05:34

:shock:   有a吗? 不是只到a吗,那都出界了吧

hanhaochi 发表于 2014-8-4 14:48:01

你调试看了么?    a 这个值的初始值就是3       for循环7次 n++   得出结果是10,开始的时候也看懵了,现在还不知道为啥a的初始值怎么是3……

小灰灰58 发表于 2014-8-4 14:48:10

xubin2004198 发表于 2014-8-4 14:05
有a吗? 不是只到a吗,那都出界了吧

没有

小灰灰58 发表于 2014-8-4 14:56:44

hanhaochi 发表于 2014-8-4 14:48
你调试看了么?    a 这个值的初始值就是3       for循环7次 n++   得出结果是10,开始的时候也看懵了 ...

这是一道考研题?
你得帮我{:1_1:}

hanhaochi 发表于 2014-8-4 15:03:09

小灰灰58 发表于 2014-8-4 14:56
这是一道考研题?
你得帮我

是出界了,a申请只能赋值a 到a……静态初始值之后就不在执行 static int n = 3;,你在调试状态下查看内存可以看到变化

oggplay 发表于 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={1,2,3};

void
f1(void) {
   static int n=3;
   a=a+a+a;
   n++;
   
}




int
main(){
int i;
for(i=0;i<7;i++)
   f1();

printf("%p \n",&m );

printf("%p %p\n",a,&a);
for(i=0;i<11;i++) printf("a[%d]=%d ",i,a);
printf("\n");
}

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


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

[\b]

小灰灰58 发表于 2014-8-4 15:08:38

hanhaochi 发表于 2014-8-4 15:03
是出界了,a申请只能赋值a 到a……静态初始值之后就不在执行 static int n = 3;,你在调试 ...

怎么解释a的值?a=0

小灰灰58 发表于 2014-8-4 15:27:49

oggplay 发表于 2014-8-4 15:07
这很简单,首先我们简化一下你的程序




师傅能详细解答吗

oggplay 发表于 2014-8-4 15:32:04

本帖最后由 oggplay 于 2014-8-4 15:47 编辑

小灰灰58 发表于 2014-8-4 15:27
师傅能详细解答吗
a已经越界,a当然不越界。取m值的时候注意就行了。

贺鹏程1234123 发表于 2014-8-4 17:50:45

楼上的都是大神啊!!!

心驰神往 发表于 2020-11-4 14:03:56

0/9吧

大神本人 发表于 2020-11-4 21:20:07

{for(;m<3;m+=2){
      int m;
      for(m=1;m<4;m++)
                printf("%d,",a);

这个循环变量m不是重复定义了吗,为啥里层和外层要这么写呢,没有意义啊

乐乐学编程 发表于 2020-11-4 23:36:59

大神本人 发表于 2020-11-4 21:20
{for(;m

不是重复定义的问题,允许这么写吗?

大神本人 发表于 2020-11-7 08:40:14

乐乐学编程 发表于 2020-11-4 23:36
不是重复定义的问题,允许这么写吗?

阁下今年几岁啦
页: [1]
查看完整版本: 这个问题谁能解决,拜他为师