【C語(yǔ)言面試題】計(jì)算機(jī)專業(yè)必備,收藏的人已成功上岸!
畢業(yè)即失業(yè),不知道現(xiàn)在還流行這句話不,反正我們當(dāng)時(shí)畢業(yè)的時(shí)候,流行這句話,也讓人很慌。
言歸正傳,畢業(yè)季,為大家分享一些關(guān)于C語(yǔ)言的面試題。

1?用變量 a 給出下面的定義
a.一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的;
b.一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針;
c.一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù);
d.一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù);
答案:
int*a[10];
int(*a)[10]
int(*a)(int);
int(*a[10])(int);
2?寫一段代碼計(jì)算結(jié)構(gòu)體、聯(lián)合、位段、內(nèi)存大小
答案:
struct A
{
inta;
charb;
floatc;
struct Ad;
doublee;
};
sizeof(A)
3?代碼改錯(cuò)
下面代碼涉及到動(dòng)態(tài)內(nèi)存開(kāi)辟,請(qǐng)改正下面錯(cuò)誤代碼:
wap( int* p1,int*p2 )
{
int* p;
? *p =*p1;
? *p1 =*p2;
? *p2 = *p;
}
答案:p 為野指針(指向一個(gè)已刪除的對(duì)象或未申請(qǐng)?jiān)L問(wèn)受限內(nèi)存區(qū)域的指針)
void swap(int *pa, int *pb)
{
inttmp;
? tmp = *pa;
? *pa = *pb;
? *pb = tmp;
}
4?數(shù)組和鏈表的區(qū)別?
數(shù)組:數(shù)據(jù)順序存儲(chǔ),固定大?。?/p>
鏈表:數(shù)據(jù)可以隨機(jī)存儲(chǔ),大小可動(dòng)態(tài)改變;

5?要對(duì)絕對(duì)地址0x100000賦值
要對(duì)絕對(duì)地址0x100000賦值,我們可以用:
(unsignedint*)0x100000 =1234;
那么要是想讓程序跳轉(zhuǎn)到絕對(duì)地址是0x100000去執(zhí)行,應(yīng)該怎么做?
答案:
*((void(*)( ))0x100000)();
(void (*)())0x100000//首先要將0x100000強(qiáng)制轉(zhuǎn)換成函數(shù)指針
*((void (*)())0x100000)(); //然后再調(diào)用它:
6?const 有什么用途?
答案:
1.可以定義 const 常量;
2.const 可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const 修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。
7?(void *)ptr 和(*(void**))ptr 的結(jié)果是否相同?
其中ptr為同一個(gè)指針。
答案:
他們的值相同。
8用#define聲明一個(gè)常數(shù),表明1年中有多少秒(忽略閏年問(wèn)題)?
答案:
#defineSECONDS_PER_YEAR(60*60*24*365)UL
要點(diǎn):
A.沒(méi)有以分號(hào)結(jié)束;
B.懂得預(yù)處理器將為你計(jì)算常數(shù)表達(dá)式的值。即60 * 60 * 24 * 365而不是31536000.
C.考慮到了16位機(jī)將會(huì)溢出,巧妙運(yùn)用了UL。
9寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)?
答案:
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
要點(diǎn):
A.參數(shù)用括號(hào)括起來(lái);
B.考察能否合理運(yùn)用條件運(yùn)算符;
10Heap與Stack的差別?
答案:?Heap是堆,Stack是棧。
Stack的空間由系統(tǒng)自動(dòng)分配/釋放,Heap上的空間手動(dòng)分配/釋放。
Stack空間有限,Heap是很大的自由存儲(chǔ)區(qū),malloc函數(shù)分配的內(nèi)存空間即在堆上。
網(wǎng)上經(jīng)典例子:
inta =0;//全局初始化區(qū)
char*p1;//全局未初始化區(qū)
voidmain(void)
{
intb;//棧
chars[] ="abc";//棧
char*p2;//棧
char*p3 ="123456";//123456\0在常量區(qū),p3在棧上
staticintc =0;//全局(靜態(tài))初始化區(qū)
p1 = (char*)malloc(10);//堆
p2 = (char*)malloc(20);//堆
}

11下面的聲明都是什么意思?
代碼:
constinta;
intconsta;
constint*a;
int*consta;
intconst* aconst;
答案:
A.前兩個(gè)的作用是一樣,a是一個(gè)常整型數(shù);
B.第三個(gè)意味著a是一個(gè)指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以);
C.第四個(gè)意思a是一個(gè)指向整型 數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是可以修改的,但指針是不可修改的);
D.最后一個(gè)意味著a是一個(gè)指向常整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù) 是不可修改的,同時(shí)指針也是不可修改的)。
12sizeof和strlen的區(qū)別?
答案:?sizeof是運(yùn)算符,在編譯時(shí)即計(jì)算好了;而strlen是函數(shù),要在運(yùn)行時(shí)才能計(jì)算。
------------??END?------------
另外,對(duì)現(xiàn)在我們的大多數(shù)朋友來(lái)說(shuō)還是學(xué)編程技術(shù)最重要!栽一棵樹(shù)最好的時(shí)間是十年前,其次是現(xiàn)在。對(duì)于準(zhǔn)備學(xué)習(xí)編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!
微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
