C語言面試題1

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()結束,棧區內存釋放,字符數組也就不存在了,會產生野指針,輸出結果未知。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章