日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

据悉,深圳某工程师沦为C语言笔试枪手

發(fā)布時(shí)間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 据悉,深圳某工程师沦为C语言笔试枪手 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事情是這樣的,昨晚晚上,有個(gè)網(wǎng)友發(fā)消息給我,說他有幾道C語言筆試題不會(huì)寫,所以,就出現(xiàn)了解題的這一幕。

文章中,我只講解了一部分,有一些題目覺得沒必要講,然后我在pdf上做了注釋,想看的在公眾號(hào)留言「20201227」獲取pdf文檔。

1、第一題

#include?"stdio.h"int?x?=?2; int?y?=?0;?int?main() {if(x){y++;}printf("%d\n",y);getchar();return?0; }

這是送分題,就沒有怎么好說的了,答案 1 .

2、解析一道比較有坑的。

#include?"stdio.h" #include?"string.h"int?a() {static?int?i?=0;if(i>=1){return?--i;}return?i++; }int?main() {int?A1?=?0;int?A2?=?0;int?A3?=?0;A1?=?a();A2?=?a();A3?=?a();printf("%d,%d,%d\n",A1,A2,A3);getchar();return?0; }

這個(gè)題目,主要要搞清楚,return i++ ,是先return i 再++,那就問題不大了。

3、這題應(yīng)該好好說一下

#include?"stdio.h"int?arg[]?=?{0,1,2,3}; int?*p?=?&arg[1]; int?v?=?0; int?w?=?0;int?main() {int?i;*(p++)+=?5;v?=?*p;?*p?=?*p?+5;w=*p;printf("v:%d\n",v);printf("w:%d\n",w);for(i=0;i<4;i++)printf("arg[%d]=%d\n",i,arg[i]);getchar();return?0; }

這題乍一看其實(shí)沒有什么難度,但是實(shí)際寫的時(shí)候,容易出問題,特意拿出來說一下。

核心在這行代碼 *(p++)+= 5;

分解出來就是 取得p指向的值,然后 +=5 ,再讓p指向下一個(gè)位置。

反匯編代碼是這樣的

mov?rax,QWORD?PTR?[rip+0x2f0f]?#?404040?<p> lea?rdx,[rax+0x4]?//這是讓指針指向下一個(gè)位置保存的寄存器 mov?QWORD?PTR?[rip+0x2f04],rdx?#?404040?<p> mov?edx,DWORD?PTR?[rax]?//這是用來也?5?運(yùn)算的寄存器 add?edx,0x5 mov?DWORD?PTR?[rax],edx

如果知道了這點(diǎn),其他的就容易很多了。

????int?i;*(p++)+=?5;??//arg[1]?=?6?p指向arg[2]v?=?*p;?//v?=?arg[2]?=?2*p?=?*p?+5;?//arg[2]?=?2+5?=?7w=*p;?//w?=?7printf("v:%d\n",v);printf("w:%d\n",w);

大家可以自己試試,如果把 *(p++)+= 5 改成 *(++p)+= 5 結(jié)果如何呢?

4、鏈表編程題

下面的題目我只寫了第一題,后面的一題沒有繼續(xù)下,寫鏈表的題目,我建議畫一張鏈表的連接圖,這樣寫代碼的時(shí)候就會(huì)特別清晰了。

大家有不懂的,可以盡管問,另一個(gè)題目,歡迎留言寫出來,我覺得這樣的題目簡(jiǎn)單,但是也比較考驗(yàn)思維能力。

題目:

鏈表圖形

直接上代碼吧

#include?"stdio.h" #include?"string.h" #include?"stdlib.h"typedef?struct?_STUDENT_INFO {int?IDx;char?Name[32];struct??_STUDENT_INFO?*Next; }?STUDENT_INFO_DEF;STUDENT_INFO_DEF?*?creat(void) {STUDENT_INFO_DEF?*?h?=?(STUDENT_INFO_DEF?*)malloc(sizeof(STUDENT_INFO_DEF));h->Next?=?NULL;return?h; }int?InsertStu(STUDENT_INFO_DEF?*head,STUDENT_INFO_DEF?stu) {if(head?==?NULL){printf("head?NULL\n");return?-1;}STUDENT_INFO_DEF?*?temp?=?head;STUDENT_INFO_DEF?*?new?=?(STUDENT_INFO_DEF?*)malloc(sizeof(STUDENT_INFO_DEF));new->IDx?=?stu.IDx;strncpy(new->Name,stu.Name,strlen(stu.Name));new->Next?=?NULL;while?(temp->Next?!=?NULL)?{temp=temp->Next;}temp->Next?=?new;printf("[InsertStu]?IDx:%d?Name:%s?Ok\n",new->IDx,new->Name);return?(0); }/*遍歷鏈表*/ int?TraverseStu(STUDENT_INFO_DEF?*head) {STUDENT_INFO_DEF?*?temp?=?head;if(head?==?NULL){printf("head?NULL\n");return?-1;}while(temp->Next!=NULL){temp?=?temp->Next;printf("[TraverseStu]IDx:%d?Name:%s\n",temp->IDx,temp->Name);}return?(0); }int?FindAndDelete(STUDENT_INFO_DEF?*head,STUDENT_INFO_DEF?stu) {STUDENT_INFO_DEF?*?temp?=?head;STUDENT_INFO_DEF?*?temp1?=?NULL;if(head?==?NULL){printf("head?NULL\n");return?-1;}while(temp->Next!=NULL){temp?=?temp->Next;if(temp->IDx?==?stu.IDx)?break;}temp1?=?temp->Next;temp->Next?=?NULL;while(temp1!=NULL){free(temp1);temp1?=?temp1->Next;}printf("[FindAndDelete]\n");return?0; }int?main() {int?i;/*創(chuàng)建鏈表頭*/STUDENT_INFO_DEF?*head;?STUDENT_INFO_DEF?stu;head=creat();for(i=0;i<5;i++){stu.IDx?=?i+1;snprintf(stu.Name,?strlen("student")+2,?"student%d",?i+1);InsertStu(head,stu);}TraverseStu(head);stu.IDx?=?2;FindAndDelete(head,stu);TraverseStu(head);getchar();return?0; }

代碼輸出

weiqifa@bsp-ubuntu1804:~/c/mianshi$?gcc?lianbiao.c?&&?./a.out [InsertStu]?IDx:1?Name:student1?Ok [InsertStu]?IDx:2?Name:student2?Ok [InsertStu]?IDx:3?Name:student3?Ok [InsertStu]?IDx:4?Name:student4?Ok [InsertStu]?IDx:5?Name:student5?Ok [TraverseStu]IDx:1?Name:student1 [TraverseStu]IDx:2?Name:student2 [TraverseStu]IDx:3?Name:student3 [TraverseStu]IDx:4?Name:student4 [TraverseStu]IDx:5?Name:student5 [FindAndDelete] [TraverseStu]IDx:1?Name:student1 [TraverseStu]IDx:2?Name:student2

推薦閱讀:

專輯|Linux文章匯總

專輯|程序人生

專輯|C語言

我的知識(shí)小密圈

總結(jié)

以上是生活随笔為你收集整理的据悉,深圳某工程师沦为C语言笔试枪手的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。