c语言,全局变量问题
#include<stdio.h>intk=1;voidFun();voidmain(){intj;for(j=0;j<2;j++)Fun();printf("k=%d"...
#include <stdio.h>
int k = 1;
void Fun();
void main()
{ int j;
for(j = 0; j < 2; j++)
Fun();
printf("k=%d", k);
}
void Fun()
{ int k = 1; /* 第11行 */
printf("k=%d,", k);
k++;
}
(17)程序的输出是 (D) 。
A、k=1,k=2,k=3 B、k=1,k=2,k=1
C、k=1,k=1,k=2 D、k=1,k=1,k=1
(18)将第11行改为“static int k=1;”后,程序的输出是 (C) 。
A、k=1,k=1,k=1 B、k=1,k=1,k=2
C、k=1,k=2,k=1 D、k=1,k=2,k=3
(19) 将第11行改为“k=1;”后,程序的输出是 (C) 。
A、k=1,k=2,k=1 B、k=1,k=1,k=1
C、k=1,k=1,k=2 D、k=1,k=2,k=3
(20) 将第11行改为“;”后,程序的输出是 (B) 。
A、k=1,k=1,k=2 B、k=1,k=2,k=3
C、k=1,k=1,k=1 D、k=1,k=2,k=1
郁闷啊,全局变量完全搞不懂,求大师解答,要详细解答,不然我还是看不懂。 展开
int k = 1;
void Fun();
void main()
{ int j;
for(j = 0; j < 2; j++)
Fun();
printf("k=%d", k);
}
void Fun()
{ int k = 1; /* 第11行 */
printf("k=%d,", k);
k++;
}
(17)程序的输出是 (D) 。
A、k=1,k=2,k=3 B、k=1,k=2,k=1
C、k=1,k=1,k=2 D、k=1,k=1,k=1
(18)将第11行改为“static int k=1;”后,程序的输出是 (C) 。
A、k=1,k=1,k=1 B、k=1,k=1,k=2
C、k=1,k=2,k=1 D、k=1,k=2,k=3
(19) 将第11行改为“k=1;”后,程序的输出是 (C) 。
A、k=1,k=2,k=1 B、k=1,k=1,k=1
C、k=1,k=1,k=2 D、k=1,k=2,k=3
(20) 将第11行改为“;”后,程序的输出是 (B) 。
A、k=1,k=1,k=2 B、k=1,k=2,k=3
C、k=1,k=1,k=1 D、k=1,k=2,k=1
郁闷啊,全局变量完全搞不懂,求大师解答,要详细解答,不然我还是看不懂。 展开
4个回答
展开全部
(17)
void Fun()
{ int k = 1; /* 第11行 */
printf("k=%d,", k);
k++;
}
如果子函数中定义了和全局变量相同的变量时,全局变量再整个函数作用于中不起作用,起作用的是函数中的局部变量,所以,这个Fun()中k被 int k=1 赋值为1, printf时 k 的值是1, 但是接下来程序退出,所以下次再进入时候 k还是从1 开始。 main 中 的 k 是全局的,所以 这个时候 k=1 , 如此全部的k 都等于1.
(18)
将第11行改为“k=1;”后。 所有的 static 定义都会当做全局变量,这个变量是在main以后定义的,所以,main中的k是上面的 int k=1; 定义的。 fun()中的是后面的 static int k=1; ,所以当执行k++ 执行后,k已经变成了2,这个时候再次运行 fun() 时候 int k 不会被重定义的。 所以 这个时候k还是2. 所以 第一个k 是1 第二次调用fun()后k是2,然后main中 k 依然是1.
(19) 不用说了,素有的k都是全局的 int k=1,调用fun的时候被重新赋值;
(20) 第十一行改成 “;” 就是删除这一行,调用fun的时候不重新赋值,只做++ 运算。
void Fun()
{ int k = 1; /* 第11行 */
printf("k=%d,", k);
k++;
}
如果子函数中定义了和全局变量相同的变量时,全局变量再整个函数作用于中不起作用,起作用的是函数中的局部变量,所以,这个Fun()中k被 int k=1 赋值为1, printf时 k 的值是1, 但是接下来程序退出,所以下次再进入时候 k还是从1 开始。 main 中 的 k 是全局的,所以 这个时候 k=1 , 如此全部的k 都等于1.
(18)
将第11行改为“k=1;”后。 所有的 static 定义都会当做全局变量,这个变量是在main以后定义的,所以,main中的k是上面的 int k=1; 定义的。 fun()中的是后面的 static int k=1; ,所以当执行k++ 执行后,k已经变成了2,这个时候再次运行 fun() 时候 int k 不会被重定义的。 所以 这个时候k还是2. 所以 第一个k 是1 第二次调用fun()后k是2,然后main中 k 依然是1.
(19) 不用说了,素有的k都是全局的 int k=1,调用fun的时候被重新赋值;
(20) 第十一行改成 “;” 就是删除这一行,调用fun的时候不重新赋值,只做++ 运算。
展开全部
你所使用的变量是最内层的变量,内层的出现后,外层的会被隐藏,例如:
int i;
{
int i;
scanf("%d",&i);
}
你所输入的是大括号里面的i,什么时候外层的才能出现呢?当内层变量被摧毁的时候!
int i;
{
int i;
scanf("%d",&i);
}
你所输入的是大括号里面的i,什么时候外层的才能出现呢?当内层变量被摧毁的时候!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变量的范围只在自己所在的大括号中起作用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-27
展开全部
局部变量和全局变量同名有限使用局部变量,
程序运行遇到变量先在局部查找,找不到才会在全局(整个文件)中找的
程序运行遇到变量先在局部查找,找不到才会在全局(整个文件)中找的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询