
c語言面試題目和答案
1、請填寫bool,float,指針變量與“零值”比較的if
語句。
提示:這里“零值”可以是0,0.0,FALSE或者“空指針”
。例如int變量n與“零值”比較的if語句為:
if(n==0)
if(n!=0)
以此類推。
(1)請寫出boolflag與“零值”比較的if語句:
【標準答案】if(flag)if(!flag)
100條經典C語言筆試題目
(2)請寫出floatx與“零值”比較的if語句:
【標準答案】constfloatEPSINON=0.00001;
if((x>=-EPSINON)&&(x<=EPSINON)
不可將浮點變量用“==”或“!=”與數字比較,應該設法
轉化成“>=”或“<=”此類形式。
100條經典C語言筆試題目
(3)請寫出char*p與“零值”比較的if語句
【標準答案】if(p==NULL)if(p!=NULL)
2、以下為Linux下的32位C程序,請計算sizeof的
值。
charstr[]=“Hello”;
char*p=str;
intn=10;
請計算
(1)sizeof(str)=(2)sizeof(p)=
(3)sizeof(n)=
【標準答案】
(1)6、(2)4、(3)4
(4)voidFunc(charstr[100])
{
……;
}
請計算sizeof(str)=
(5)void*p=malloc(100);
請計算sizeof(p)=
【標準答案】(4)4、(5)4
4、用變量a給出下面的定義
e)一個有10個指針的數組,該指針是指向一個整型數
的;
f)一個指向有10個整型數數組的指針;
g)一個指向函數的指針,該函數有一個整型參數并返
回一個整型數;
h)一個有10個指針的數組,該指針指向一個函數,該
函數有一個整型參數并返回一個整型數;
【標準答案】e)int*a[10];f)int(*a)[10]
g)int(*a)(int);h)int(*a[10])(int)
5、設有以下說明和定義:
typedefunion{longi;intk[5];charc;}DATE;
structdata{intcat;DATEcow;doubledog;}too;
DATEmax;
則語句printf("%d",sizeof(structdate)+sizeof(max));的
執行結果是:_____
【標準答案】DATE是一個union,變量公用空間.里面最
大的變量類型是int[5],占用20個字節.所以它的大小是
20
data是一個struct,每個變量分開占用空間.依次為int4+
DATE20+double8=32.
所以結果是20+32=52.
當然...在某些16位編輯器下,int可能是2字節,那么結果
是int2+DATE10+double8=20
6、請問以下代碼有什么問題:
intmain()
{
chara;
char*str=&a;
strcpy(str,"hello");
printf(str);
return0;
}
【標準答案】沒有為str分配內存空間,將會發生異常
問題出在將一個字符串復制進一個字符變量指針所指
地址。雖然可以正確輸出結果,但因為越界進行內在
讀寫而導致程序崩潰。
7、請問以下代碼有什么問題:
char*s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么錯?
【標準答案】"AAA"是字符串常量。s是指針,指向這個
字符串常量,所以聲明s的時候就有問題。
cosntchar*s="AAA";
然后又因為是常量,所以對是s[0]的賦值操作是不合法
的。
8、int(*s[10])(int)表示的是什么啊
【標準答案】int(*s[10])(int)函數指針數組,每個指針
指向一個intfunc(intparam)的函數。
9、c和c++中的struct有什么不同?
【標準答案】c和c++中struct的主要區別是c中的struct
不可以含有成員函數,而c++中的struct可以。c++中
struct和class的主要區別在于默認的存取權限不同,
struct默認為public,而class默認為private
10、voidgetmemory(char*p)
{
p=(char*)malloc(100);
strcpy(p,“helloworld”);
}
intmain()
{
char*str=NULL;
getmemory(str);
printf(“%s/n”,str);
free(str);
return0;
}會出現什么問題?
【標準答案】程序崩潰,getmemory中的malloc不能返回
動態內存,free()對str操作很危險。
11、charszstr[10];
strcpy(szstr,"");
產生什么結果?為什么?
【標準答案】長度不一樣,出現段錯誤。
100條經典C語言筆試題目
12、數組和鏈表的區別?
【標準答案】數組:數據順序存儲,固定大小;
鏈表:數據可以隨機存儲,大小可動態改變
13、voidmain()
{
charaa[10];
printf(“%d”,strlen(aa));
}
會出現什么問題?打印結果是是多少?
【標準答案】sizeof()和初不初始化,沒有關系,
strlen()和初始化有關,打印結果值未知。
14、給定結構structA
{
chart:4;
chark:4;
unsignedshorti:8;
unsignedlongm;
};問sizeof(A)=?
【標準答案】8
15、structname1{
charstr;
shortx;
intnum;
};求sizeof(name1)?
【標準答案】8
16、structname2{
charstr;
intnum;
shortx;
};求sizeof(name2)?
【標準答案】12
17、程序哪里有錯誤
wap(int*p1,int*p2)
{
int*p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
【標準答案】p為野指針(指向一個已刪除的對象或未申請訪問受限內存區域的指針)
19、(void*)ptr和(*(void**))ptr的結果是否相同?其
中ptr為同一個指針。
【標準答案】(void*)ptr和(*(void**))ptr值是相同的
20、要對絕對地址0x100000賦值,我們可以用
(unsignedint*)0x100000=1234;
那么要是想讓程序跳轉到絕對地址是0x100000去執行
,應該怎么做?
【標準答案】*((void(*)())0x100000)();
首先要將0x100000強制轉換成函數指針,即:
(void(*)())0x100000
然后再調用它:
*((void(*)())0x100000)();
本文發布于:2023-03-07 07:52:58,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1678146779128724.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:c語言面試題.doc
本文 PDF 下載地址:c語言面試題.pdf
| 留言與評論(共有 0 條評論) |