畢業即失業,不知道現在還流行這句話不,反正我們當時畢業的時候,流行這句話,也讓人很慌。
言歸正傳,畢業季,為大家分享一些關于C語言的面試題。
1 用變量 a 給出下面的定義
a.一個有10個指針的數組,該指針是指向一個整型數的;
b.一個指向有10個整型數數組的指針;
c.一個指向函數的指針,該函數有一個整型參數并返回一個整型數;
d.一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數并返回一個整型數;
答案:
int*a[10];
int(*a)[10]
int(*a)(int);
int(*a[10])(int);
2 寫一段代碼計算結構體、聯合、位段、内存大小
答案:
struct A
{
inta;
charb;
floatc;
struct Ad;
doublee;
};
sizeof(A)
3 代碼改錯
下面代碼涉及到動态内存開辟,請改正下面錯誤代碼:
wap( int* p1,int*p2 )
{
int* p;
*p =*p1;
*p1 =*p2;
*p2 = *p;
}
答案:p 為野指針(指向一個已删除的對象或未申請訪問受限内存區域的指針)
void swap(int *pa, int *pb)
{
inttmp;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
4 數組和鍊表的區别?
數組:數據順序存儲,固定大小;
鍊表:數據可以随機存儲,大小可動态改變;
5 要對絕對地址0x100000賦值
要對絕對地址0x100000賦值,我們可以用:
(unsignedint*)0x100000 =1234;
那麼要是想讓程序跳轉到絕對地址是0x100000去執行,應該怎麼做?
答案:
*((void(*)( ))0x100000)();
(void (*)())0x100000//首先要将0x100000強制轉換成函數指針
*((void (*)())0x100000)(); //然後再調用它:
6 const 有什麼用途?
答案:
1.可以定義 const 常量;
2.const 可以修飾函數的參數、返回值,甚至函數的定義體。被const 修飾的東西都受到強制保護,可以預防意外的變動,能提高程序的健壯性。
7 (void *)ptr 和(*(void**))ptr 的結果是否相同?
其中ptr為同一個指針。
答案:
他們的值相同。
8用#define聲明一個常數,表明1年中有多少秒(忽略閏年問題)?
答案:
#defineSECONDS_PER_YEAR(60*60*24*365)UL
要點:
A.沒有以分号結束;
B.懂得預處理器将為你計算常數表達式的值。即60 * 60 * 24 * 365而不是31536000.
C.考慮到了16位機将會溢出,巧妙運用了UL。
9寫一個“标準”宏MIN,這個宏輸入兩個參數并返回較小的一個?
答案:
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
要點:
A.參數用括号括起來;
B.考察能否合理運用條件運算符;
10Heap與Stack的差别?
答案: Heap是堆,Stack是棧。
Stack的空間由系統自動分配/釋放,Heap上的空間手動分配/釋放。
Stack空間有限,Heap是很大的自由存儲區,malloc函數分配的内存空間即在堆上。
網上經典例子:
inta =0;//全局初始化區
char*p1;//全局未初始化區
voidmain(void)
{
intb;//棧
chars[] ="abc";//棧
char*p2;//棧
char*p3 ="123456";//123456\0在常量區,p3在棧上
staticintc =0;//全局(靜态)初始化區
p1 = (char*)malloc(10);//堆
p2 = (char*)malloc(20);//堆
}
11下面的聲明都是什麼意思?
代碼:
constinta;
intconsta;
constint*a;
int*consta;
intconst* aconst;
答案:
A.前兩個的作用是一樣,a是一個常整型數;
B.第三個意味着a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以);
C.第四個意思a是一個指向整型 數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的);
D.最後一個意味着a是一個指向常整型數的常指針(也就是說,指針指向的整型數 是不可修改的,同時指針也是不可修改的)。
12sizeof和strlen的區别?
答案: sizeof是運算符,在編譯時即計算好了;而strlen是函數,要在運行時才能計算。
------------ END ------------
另外,對現在我們的大多數朋友來說還是學編程技術最重要!栽一棵樹最好的時間是十年前,其次是現在。對于準備學習編程的小夥伴,如果你想更好地提升你的編程核心能力(内功)不妨從現在開始!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
點擊下方【了解更多】獲取更多學習資料幫助你學習成長哦~
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!