中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

12個常見C語言面試題及答案(3)

時間:2024-07-22 20:02:02 學人智庫 我要投稿
  • 相關推薦

12個常見C語言面試題及答案(3)

  printf("\n [%c] \n",*ptr);

12個常見C語言面試題及答案(3)

  return 0; }

  答:輸出結果應該是這樣:

  [L] [i]

  因為“++”和“*”的優(yōu)先權一樣,所以“*ptr++”相當于“*(ptr++)”。即應該先執(zhí)行ptr++,然后才是*ptr,所以操作結果是“L”。第二個結果是“i”。

  9.問:修改代碼片段(或者只讀代碼)

  問:下面的代碼段有錯,你能指出來嗎?

  #include int main(void) {

  char *ptr = "Linux";

  *ptr = 'T';

  printf("\n [%s] \n", ptr);

  return 0; }

  答:這是因為,通過*ptr = ‘T’,會改變內(nèi)存中代碼段(只讀代碼)“Linux”的第一個字母。這個操作是無效的,因此會造成seg-fault或者崩潰。

  10.會改變自己名字的進程

  問:你能寫出一個在運行時改變自己進程名的程序嗎?

  答:參見下面這段代碼:

  #include int main(int argc, char *argv[]) {

  int i = 0;

  char buff[100];

  memset(buff,0,sizeof(buff));

  strncpy(buff, argv[0], sizeof(buff));

  memset(argv[0],0,strlen(buff));

  strncpy(argv[0], "NewName", 7);

  // Simulate a wait. Check the process // name at this point. for(;i<0xffffffff;i++);

  return 0; }

  11.返回本地變量的地址

  問:下面代碼有問題嗎?如果有,該怎么修改?

  #include int* inc(int val) {

  int a = val;

  a++;

  return &a; } int main(void) {

  int a = 10;

  int *val = inc(a);

  printf("\n Incremented value is equal to [%d] \n", *val);

  return 0; }

  答:盡管上面的程序有時候能夠正常運行,但是在“inc()”中存在嚴重的漏洞。這個函數(shù)返回本地變量的地址。因為本地變量的生命周期就是“inc()”的生命周期,所以在inc結束后,使用本地變量會發(fā)生不好的結果。這可以通過將main()中變量“a”的地址來避免,這樣以后還可以修改這個地址存儲的值。

  12.處理printf()的參數(shù)

  問:下面代碼會輸出什么?

  #include int main(void) {

  int a = 10, b = 20, c = 30;

  printf("\n %d..%d..%d \n", a+b+c, (b = b*2), (c = c*2));

  return 0; }

  答:輸出結果是:

  110..40..60

  這是因為C語言里函數(shù)的參數(shù)默認是從右往左處理的,輸出時是從左往右。

【12個常見C語言面試題及答案(3)】相關文章:

java面試題及答案10-03

計算機二級c語言考試習題及答案07-03

名校英語面試經(jīng)典常見的面試題10-21

經(jīng)典常見面試題分析解答08-14

計算機二級C語言考試選擇題(帶答案)(3)10-23

3月計算機二級C語言真題及答案(完整版)08-26

c語言實習總結06-30

c語言讀書筆記09-28

職稱英語衛(wèi)生類c級考試真題及答案(3)10-12

英語面試常見的問題及答案10-29