1、下面程序會輸出什麼?
static int a=1;
void fun1(void) {a=2;}
void fun2(void){ int a=3;}
void fun3(void){ static int a=4;}
int main()
{
printf("%d",a);
fun1();
printf("%d",a);
fun2();
printf("%d",a);
fun3();
printf("%d",a);
}
解析:
本題考查的靜態局部變量只對它的函數始終可見,函數體執行完過後雖然還存在,但是無法被其他的使用
printf(“%d”,a) 輸出全局靜態變量,所以輸出1
fun1(); a=2,所以會修改全局靜態變量,輸出2
fun2(); int a=3,是在fun2裏的局部變量,所以調用結束就釋放了,不影響全局的a 值,所以輸出2
fun3(); 也是局部變量,雖然是靜態的,但是不會影響全局的a值,扔然輸出2
所以最後的結果爲1,2,2,2
2、如下代碼輸出結果是什麼?
#include <stdio.h>
char *mystring();
”{ char buffer[6]={0};
char *s="Hello world!";
for(int i=0;i<sizeof(buffer)-1;i++)
{ buffer[i]=*(s+i);
}
return buffer;
}
int main( int argc,char **argv)
{printf("%s\n",mystring());
return 0;
}
解析:
函數char *mystring()中沒有使用new或者malloc分配內存,所以buffer數組的內存區在棧區,隨着char *mystring()結束,棧區內存釋放,字符數組也就不存在了,會產生野指針,輸出結果未知。