注册 登录
编程论坛 新人交流区

关于局部变量与全局变量同名的题

angelofman 发布于 2007-11-09 14:42, 1090 次点击
#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)程序的输出是 (17) 。
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;”后,程序的输出是 (18) 。
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;”后,程序的输出是 (19) 。
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行改为“;”后,程序的输出是 (20) 。
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
谁能给我解释下19-20两个题??
8 回复
#2
拉风2007-11-09 17:00
(17)A(18)A(19)D (20)B k=1;语句表示重新对K赋值,实际上不起作用,跟下题的空语句差不多;因K是全局变量;故可在函数内改变其值

为什么把程序放到vc6.0上函数里的int被屏蔽掉了啊,我晕了!
#3
sonfly2007-11-09 19:45
(17)D
(18)C
(19)C
(20)B
注意局部变量的回收机制。
19题中每调用一次fun(),全局变量k就被赋值为1,输出完后,自增1
20题是先输出全局变量k,再k自增

[此贴子已经被作者于2007-11-9 19:50:36编辑过]

#4
q4076159562007-11-10 11:22
...
#5
now2007-11-10 15:14
支持3楼.
1、外部变量,可被全局访问。属静态型外部变量,在静态型数据区分配空间。其初始化只执行一次。在程序运行其间,一直在内存的静态数据存储区分配着空间,则永久存在性。
2、内部变量,只限本函数内部或块内部使用。
定义时未加static限定词时,属自动型变量,在动态数据区分配空间,其随函数调用而存在,随函数调用结束而消失,不会在两次函数调用之间保持其值。每一次函数调用都必须重新分配内存单元,重新初始化。
定义时若加static限定词时,属静态型内部变量,在静态数据区分配内存空间,其初始化也只执行一次,在程序整个运行其间一直在内存中分配着空间,而不是随函数的每次调用而存在,随函数的每次调用结束而消失。


其中19题:k=1;则没有在函数内部重新定义一个新变量为内部变量,这只是对外部变量 k的调用,并赋于新值1。
20题:只剩下 ; ,则此时,与19题一样,只是它没有在每次函数调用时赋于外部变量k新值。
#6
miniwings2007-11-10 16:14
嗯~又学到了
#7
abble2007-11-10 16:24
学习了!
#8
ecjtudream2007-11-10 18:57

支持5楼!

学习要学着总结呀!

嘿嘿!

#9
pangya4262007-11-10 20:21

路过学习,刷贴进技术区

1