日韩欧美另类久久久精品_亚洲大色堂人在线无码_国产三级aⅴ在线播放_在线无码aⅴ精品动漫_国产精品精品国产专区

“中軟”的關(guān)于內(nèi)存的筆試題

  我對中軟的第三題關(guān)于“內(nèi)存”的題目感興趣,特拿來探討。題目如下:

  三. 有關(guān)內(nèi)存的思考題

  1. void getmemory(char *p)

  {

  p=(char*)malloc(100);

  }

  void test(void)

  {

  char * str =null;

  getmemory(str);

  strcpy(str, "hello,world");

  printf(str);

  }

  請問運行Test函數(shù)會有什么樣的結(jié)果

  2. char*getmemory(void)

  {

  char p[]="hello world";

  return p;

  }

  void test(void)

  {

  char *str=null;

  str=getmemory();

  printf(str);

  }

  請問運行Test 函數(shù)會有什么樣的結(jié)果.

  答案很簡單,1 運行過程中會出現(xiàn)錯誤 2 會輸出 亂碼

  題目看似不難,但程序員,尤其是初級的程序員在寫代碼時很容易犯的一個毛病。

  C語言中,實參變量和形參變量之間的數(shù)據(jù)傳遞是單向的“值傳遞”方式,指針變量作函數(shù)參數(shù)也要遵循這一原則。調(diào)用函數(shù)不能改變實參指針變量的值(即指針的地址),但可以改變實參指針變量所指變量的值。

  程序1就試圖改變 str 的值,肯定不成功,getmemory執(zhí)行完后,str還是NULL,所以在執(zhí)行strcpy時,程序試圖給NULL的指針賦值,會發(fā)生運行時錯誤。

  程序2的問題在于 getmemory函數(shù)試圖返回局部變量的地址。眾所周知,局部變量的生命只存在于該函數(shù)體內(nèi),一旦離開該函數(shù)體,該局部變量便在內(nèi)存中消失,所以str得到的只能是亂碼。當(dāng)然也不排除在某些特定的編譯器上會輸出“hello,world”字樣。但嚴格的按照標(biāo)準C來說,這種寫法也是不被允許的。

本文已影響6827
上一篇:銀行筆試經(jīng)濟專業(yè)題目 下一篇:滴滴校招產(chǎn)品筆試題

相關(guān)文章推薦

|||||