1.有下面Pascal程序段: 
1.Program ret(input,output) 
2.var f:function(integer):integer 
3:function a:function(integer):integer 
4.var m:integer 
5.function addm(n:integer):integer 
6.begin return m+n end; 
7.begin m=0;return addm end 
8.procedure b(g:function(integer):integer) 
9.begin writeln(g(z)) end; 
10.begin 
11.f:=a;b(f); 
12.end 
假定非局部名字使用静态作用域,为什么程序在栈式分配情况下不能正确工作? 

2.为什么C语言允许函数类型作为函数的返回类型,而Pascal却不允许? 

3.下面程序在Sun工作站上运行时陷入死循环,试说明原因,如果将long *p改成short *p,将long k改成short k,loop的循环体执行一次便停止了,试说明原因. 
main() 
{addr(); 
loop();} 
long *p; 
loop() 
{long i,j;j=0; 
for(i=0;i<10;i++) 
{(*p)--;j++;} 

addr() 
{long k;k=0; 
p=&k;}