當前位置:首頁>職場>c語言怎么編程選擇題(計算機專業必備)
發布時間:2024-01-24閱讀(13)
畢業即失業,不知道現在還流行這句話不,反正我們當時畢業的時候,流行這句話,也讓人很慌。
言歸正傳,畢業季,為大家分享一些關于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