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

正文內(nèi)容

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

2024-10-14 03:55 本頁面
 

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