这个问题谁能解决,拜他为师
#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
:shock: 有a吗? 不是只到a吗,那都出界了吧 你调试看了么? a 这个值的初始值就是3 for循环7次 n++ 得出结果是10,开始的时候也看懵了,现在还不知道为啥a的初始值怎么是3…… xubin2004198 发表于 2014-8-4 14:05
有a吗? 不是只到a吗,那都出界了吧
没有
hanhaochi 发表于 2014-8-4 14:48
你调试看了么? a 这个值的初始值就是3 for循环7次 n++ 得出结果是10,开始的时候也看懵了 ...
这是一道考研题?
你得帮我{:1_1:} 小灰灰58 发表于 2014-8-4 14:56
这是一道考研题?
你得帮我
是出界了,a申请只能赋值a 到a……静态初始值之后就不在执行 static int n = 3;,你在调试状态下查看内存可以看到变化 本帖最后由 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]
hanhaochi 发表于 2014-8-4 15:03
是出界了,a申请只能赋值a 到a……静态初始值之后就不在执行 static int n = 3;,你在调试 ...
怎么解释a的值?a=0 oggplay 发表于 2014-8-4 15:07
这很简单,首先我们简化一下你的程序
师傅能详细解答吗
本帖最后由 oggplay 于 2014-8-4 15:47 编辑
小灰灰58 发表于 2014-8-4 15:27
师傅能详细解答吗
a已经越界,a当然不越界。取m值的时候注意就行了。
楼上的都是大神啊!!! 0/9吧 {for(;m<3;m+=2){
int m;
for(m=1;m<4;m++)
printf("%d,",a);
这个循环变量m不是重复定义了吗,为啥里层和外层要这么写呢,没有意义啊 大神本人 发表于 2020-11-4 21:20
{for(;m
不是重复定义的问题,允许这么写吗? 乐乐学编程 发表于 2020-11-4 23:36
不是重复定义的问题,允许这么写吗?
阁下今年几岁啦
页:
[1]