freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語(yǔ)言軟件工程師筆試題精華(編輯修改稿)

2024-10-14 03:55 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 硬件的細(xì)節(jié)和它的局限,然而PC機(jī)程序往往把硬件作為一個(gè)無(wú)法避免的煩惱。C語(yǔ)言同意一些令人震驚的結(jié)構(gòu),下面的結(jié)構(gòu)是合法的嗎,如果是它做些什么? int a = 5, b = 7, c。c = a+++b。這個(gè)問(wèn)題將做為這個(gè)測(cè)驗(yàn)的一個(gè)愉快的結(jié)尾。不管你相不相信,上面的例子是完全合乎語(yǔ)法的。問(wèn)題是編譯器如何處理它?水平不高的編譯作者實(shí)際上會(huì)爭(zhēng)論這個(gè)問(wèn)題,根據(jù)最處理原則,編譯器應(yīng)當(dāng)能處理盡可能所有合法的用法。因此,上面的代碼被處理成: c = a++ + b。因此, 這段代碼持行后a = 6, b = 7, c = 12。如果你知道答案,或猜出正確答案,做得好。如果你不知道答案,我也不把這個(gè)當(dāng)作問(wèn)題。我發(fā)現(xiàn)這個(gè)問(wèn)題的最大好處是這是一個(gè)關(guān)于代碼編寫(xiě)風(fēng)格,代碼的可讀性,代碼的可修改性的好的話題。設(shè)有以下說(shuō)明和定義:typedef union {long i。int k[5]。char c。} DATE。struct data { int cat。DATE cow。double dog。} too。DATE max。則語(yǔ)句 printf(“%d”,sizeof(struct date)+sizeof(max))。的執(zhí)行結(jié)果是?答、結(jié)果是:52。DATE是一個(gè)union, [5], data是一個(gè)struct, + DATE20 + double8 = 20 + 32 = ?在某些16位編輯器下, int可能是2字節(jié),那么結(jié)果是 int2 + DATE10 + double8 = 20請(qǐng)寫(xiě)出下列代碼的輸出內(nèi)容 b=a++。include c=++a。main()d=10*a++。{ printf(“b,c,d:%d,%d,%d”,b,c,d)。int a,b,c,d。return 0。a=10。} 答:10,12,120寫(xiě)出下列代碼的輸出內(nèi)容 include int inc(int a){ return(++a)。} int multi(int*a,int*b,int*c){ return(*c=*a**b)。} typedef int(FUNC1)(int in)。typedef int(FUNC2)(int*,int*,int*)。void show(FUNC2 fun,int arg1, int*arg2){ INCp=amp。inc。int temp =p(arg1)。fun(amp。temp,amp。arg1, arg2)。printf(“%dn”,*arg2)。} main(){ int a。show(multi,10,amp。a)。return 0。} 答:110請(qǐng)找出下面代碼中的所以錯(cuò)誤說(shuō)明:以下代碼是把一個(gè)字符串倒序,如“abcd”倒序后變?yōu)椤癲cba”include””main(){char*src=”hello,world”。char* dest=NULL。int len=strlen(src)。dest=(char*)malloc(len)。char* d=dest。char* s=src[len]。while(len–!=0)1d++=s–。1printf(“%s”,dest)。1return 0。1} 答: 方法1: int main(){ char* src = “hello,world”。int len = strlen(src)。char* dest =(char*)malloc(len+1)。//要為分配一個(gè)空間char* d = dest。char* s = amp。src[len1]。//指向最后一個(gè)字符 while(len–!= 0)*d++=*s–。*d = 0。//尾部要加 printf(“%sn”,dest)。free(dest)。// 使用完,應(yīng)當(dāng)釋放空間,以免造成內(nèi)存匯泄露 return 0。}方法2: include include main(){char str[]=”hello,world”。int len=strlen(str)。char t。for(int i=0。i {t=str[i]。str[i]=str[leni1]。str[leni1]=t。}printf(“%s”,str)。return 0。}請(qǐng)問(wèn)下面程序有什么錯(cuò)誤? int a[60][250][1000],i,j,k。for(k=0。k答案:把循環(huán)語(yǔ)句內(nèi)外換一下請(qǐng)問(wèn)下面程序會(huì)出現(xiàn)什么情況?.define Max_CB 500void LmiQueryCSmd(Struct MSgCB * pmsg){unsigned char ucCmdNum。......for(ucCmdNum=0。ucCmdNum......。}答案:死循環(huán)以下3個(gè)有什么區(qū)別char * const p。//常量指針,p的值不可以修改 char const * p;//指向常量的指針,指向的常量值不可以改const char *p; //和char const *p1寫(xiě)出下面的結(jié)果 char str1[] = “abc”。char str2[] = “abc”。const char str3[] = “abc”。const char str4[] = “abc”。const char *str5 = “abc”。const char *str6 = “abc”。char *str7 = “abc”。char *str8 = “abc”。cout 而str5,str6,str7,str8是指針,它們指向相同的常量區(qū)域。1以下代碼中的兩個(gè)sizeof用法有問(wèn)題嗎?void UpperCase(char str[])// 將 str 中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母 { for(size_t i=0。i if(39。a39。1寫(xiě)出輸出結(jié)果 main(){ int a[5]={1,2,3,4,5}。int *ptr=(int *)(amp。a+1)。printf(“%d,%d”,*(a+1),*(ptr1))。} 輸出:2,5 *(a+1)就是a[1],*(ptr1)就是a[4],執(zhí)行結(jié)果是2,5 amp。a+1不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏移,是偏移了一個(gè)數(shù)組的大?。ū纠?個(gè)int)int *ptr=(int *)(amp。a+1)。則ptr實(shí)際是amp。(a[5]),也就是a+5原因如下:amp。a是數(shù)組指針,其類型為 int(*)[5]。而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同,a是長(zhǎng)度為5的int數(shù)組指針,所以要加 5*sizeof(int),所以ptr實(shí)際是a[5],但是prt與(amp。a+1)類型是不一樣的(這點(diǎn)很重要),所以prt1只會(huì)減去sizeof(int*)。a,amp。a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a[0]的地址,amp。a是對(duì)象(數(shù)組)首地址,a+1是數(shù)組下一元素的地址,即a[1],amp。a+1是下一個(gè)對(duì)象的地址,即a[5].1請(qǐng)問(wèn)以下代碼有什么問(wèn)題: int main(){char a。char *str=amp。a。strcpy(str,“hello”)。printf(str)。return 0。}沒(méi)有為str分配內(nèi)存空間,將會(huì)發(fā)生異常問(wèn)題出在將一個(gè)字符串復(fù)制進(jìn)一個(gè)字符變量指針?biāo)傅刂?。雖然可以正確輸出結(jié)果,但因?yàn)樵浇邕M(jìn)行內(nèi)在讀寫(xiě)而導(dǎo)致程序崩潰。char* s=“AAA”。printf(“%s”,s)。s[0]=39。B39。printf(“%s”,s)。有什么錯(cuò)?“AAA”是字符串常量。s是指針,指向這個(gè)字符串常量,所以聲明s的時(shí)候就有問(wèn)題。cosnt char* s=“AAA”。然后又因?yàn)槭浅A?,所以?duì)是s[0]的賦值操作是不合法的。1有以下表達(dá)式:int a=248。b=4。int const c=21。const int *d=amp。a。int *const e=amp。b。int const *f const =amp。a。請(qǐng)問(wèn)下列表達(dá)式哪些會(huì)被編譯器禁止?為什么? *c=32。d=amp。b。*d=43。e=34。e=amp。a。f=0x321f。*c 這是個(gè)什么東東,禁止 *d 說(shuō)了是const,禁止 e = amp。a 說(shuō)了是const 禁止 const *f const =amp。a。禁止1交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3。有兩種解法, 一種用算術(shù)算法, 一種用^(異或)a = a + b。b = ab。or a = a^b。b = a^b。a = a^b。// 只能對(duì)int,char..or a ^= b ^= a。1下面的程序會(huì)出現(xiàn)什么結(jié)果.include include void getmemory(char *p){p=(char *)malloc(100)。strcpy(p,”hello world”)。} int main(){char *str=NULL。getmemory(str)。printf(“%s/n”,str)。free(str)。return 0。} 程序崩潰,getmemory中的malloc 不能返回動(dòng)態(tài)內(nèi)存,free()對(duì)str操作很危險(xiǎn)1下面的語(yǔ)句會(huì)出現(xiàn)什么結(jié)果? char szstr[10]。strcpy(szstr,”0123456789″)。答案:長(zhǎng)度不一樣,會(huì)造成非法的OS,應(yīng)該改為char szstr[11];1(void *)ptr 和(*(void**))ptr的結(jié)果是否相同?答:其中ptr為同一個(gè)指針,(void *)ptr 和(*(void**))ptr值是相同的 問(wèn)函數(shù)既然不會(huì)被其它函數(shù)調(diào)用,為什么要返回1?int main(){ int x=3。printf(“%d”,x)。return 1。} 答:mian中,c標(biāo)準(zhǔn)認(rèn)為0表示成功,非0表示錯(cuò)誤。具體的值是某中具體出錯(cuò)信息2對(duì)絕對(duì)地址0100000賦值且想讓程序跳轉(zhuǎn)到絕對(duì)地址是0100000去執(zhí)行(unsigned int*)0100000 = 1234。首先要將0100000強(qiáng)制轉(zhuǎn)換成函數(shù)指針,即:(void(*)())0100000 然后再調(diào)用它: *((void(*)())0100000)()。用typedef可以看得更直觀些: typedef void(*)()voidFuncPtr。*((voidFuncPtr)0100000)()。2輸出多少?并分析過(guò)程 unsigned short A = 10。printf(“~A = %un”, ~A)。char c=128。printf(“c=%dn”,c)。第一題,~A =0xfffffff5,int值 為-11,但輸出的是uint。所以輸出4294967285第二題,c=010,輸出的是int,最高位為1,是負(fù)數(shù),所以它的值就是000的補(bǔ)碼就是128,所以輸出-128。這兩道題都是在考察二進(jìn)制向int或uint轉(zhuǎn)換時(shí)的最高位處理。2分析下面的程序:void GetMemory(char **p,int num){*p=(char *)malloc(num)。}int main(){char *str=NULL。GetMemory(amp。str,100)。strcpy(str,”hello”)。free(str)。if(str!=NULL){strcpy(str,”world”)。}printf(“n str is %s”,str)。getchar()。}問(wèn)輸出結(jié)果是什么?希望大家能說(shuō)說(shuō)原因,先謝謝了 輸出str is world。free 只是釋放的str指向的內(nèi)存空間,,有一個(gè)好的習(xí)慣就是將str=,如果輸出語(yǔ)句之前還存在分配空間的操作的話,這段存儲(chǔ)空間是可能被重新分配給其他變量的,盡管這段程序確實(shí)是存在大大的問(wèn)題(上面各位已經(jīng)說(shuō)得很清楚了),但是通常會(huì)打印出world來(lái)。這是因?yàn)椋M(jìn)程中的內(nèi)存管理一般不是由操作系統(tǒng)完成的,而是由庫(kù)函數(shù)自己完成的。當(dāng)你malloc一塊內(nèi)存的時(shí)候,管理庫(kù)向操作系統(tǒng)申請(qǐng)一塊空間(可能會(huì)比你申請(qǐng)的大一些),然后在這塊空間中記錄一些管理信息(一般是在你申請(qǐng)的內(nèi)存前面一點(diǎn)),并將可用內(nèi)存的地址返回。但是釋放內(nèi)存的時(shí)候,管理庫(kù)通常都不會(huì)將內(nèi)存還給操作系統(tǒng),因此你是可以繼續(xù)訪問(wèn)這塊地址的,只不過(guò)。樓上都說(shuō)過(guò)了,最好別這么干。sizeof()和初不初始化,沒(méi)有關(guān)系; strlen()和初始化有關(guān)。char(*str)[20]。/*str是一個(gè)數(shù)組指針,即指向數(shù)組的指針.*/char *str[20]。/*str是一個(gè)指針數(shù)組,其元素為指針型數(shù)據(jù).*/2long a=0801010。a+5=? 答:0801010用二進(jìn)制表示為:“1000 0000 0001 0000 0001 0000”,十進(jìn)制的值為8392720,再加上5就是83927252下面的函數(shù)實(shí)現(xiàn)在一個(gè)數(shù)上加一個(gè)數(shù),有什么錯(cuò)誤?請(qǐng)改正。int add_n(int n){ static int i = 100。i += n。return i。} 當(dāng)你第二次調(diào)用時(shí)得不到正確的結(jié)果,難道你寫(xiě)個(gè)函數(shù)就是為了調(diào)用一次?問(wèn)題就出在 static上2給出下面程序的答案 typedef struct AA { int b1:5。int b2:2。}AA。void main(){ AA aa。char cc[100]。strcpy(cc,”0123456789abcdefghijklmnopqrstuvwxyz”)。memcpy(amp。aa,cc,sizeof(AA))。cout 首先sizeof(AA)的大小為4,aa的4個(gè)字節(jié)所存放的值是: 0,1,2,3的ASC碼,即00110000,00110001,00110010,00110011 所以,最后一步:顯示
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1