無論學習何種編程語言不能只停留在看的層面上,最后還是得要自己去實際敲寫代碼才能成長,下面是編程獅整理的c語言編程得十大面試題目及其答案。
1.變量/函數(shù)的聲明和定義之間有什么區(qū)別
答案:變量/函數(shù)的聲明僅聲明變量/函數(shù)存在于程序中的某個位置,但未為其分配內(nèi)存。但是變量/函數(shù)的聲明起著重要的作用。這就是變量/函數(shù)的類型。因此,在聲明變量時,程序會知道該變量的數(shù)據(jù)類型。在聲明函數(shù)的情況下,程序會知道該函數(shù)的參數(shù)是什么,它們的數(shù)據(jù)類型,參數(shù)的順序以及函數(shù)的返回類型。這就是聲明。關于定義,當我們定義變量/函數(shù)時,除了聲明的作用外,它還為該變量/函數(shù)分配內(nèi)存。因此,我們可以將定義視為聲明的超集。(或聲明作為定義的子集)。
2.C中有哪些不同的存儲類說明符?
答案:auto, register, static, extern
3.變量的范圍是什么?變量在C中的作用域怎樣?
答案:變量的范圍是程序的一部分,可以直接訪問該變量。在C語言中,所有標識符都在詞法(或靜態(tài))范圍內(nèi)。
4.沒有分號,您將如何打印“ Hello World”?
#include <stdio.h>
int main(void)
{
if (printf("Hello World")) {
}
}
5.什么時候應該在C程序中使用指針?
答案:
1.獲取變量的地址
2.為了在C中實現(xiàn)引用傳遞:指針允許不同的函數(shù)共享和修改其局部變量。
3.通過大型結構,以便避免完整復制結構。
4.實現(xiàn)“鏈接”數(shù)據(jù)結構,例如鏈接列表和二進制樹。
6.什么是NULL指針?
答案: NULL用于指示指針未指向有效位置。理想情況下,如果在聲明時不知道指針的值,則應將指針初始化為NULL。另外,當由它指向的內(nèi)存在程序中間被釋放時,我們應該使指針為NULL。
7.什么是懸空指針?
答案:懸空指針是沒有指向有效內(nèi)存位置的指針。當刪除或釋放對象時,如果不修改指針的值,就會出現(xiàn)懸空指針,因此指針仍然指向釋放后的內(nèi)存的存儲位置。以下是示例。
// 示例1
int* ptr = (int*)malloc(sizeof(int));
..........................free(ptr);
// ptr 是一個懸空指針,以下操作無效
*ptr = 10;
// 示例2
int* ptr = NULL { int x = 10; ptr = &x; }
//x超出范圍,并且分配給x的內(nèi)存現(xiàn)在可用
//所以ptr現(xiàn)在是懸空指針
8.什么是內(nèi)存泄漏?為何應避免使用它
答案:程序員在堆中創(chuàng)建內(nèi)存而忘記刪除它時,就會發(fā)生內(nèi)存泄漏。對于諸如守護程序和服務器之類的程序而言,內(nèi)存泄漏是特別嚴重的問題,根據(jù)定義它們永遠不會終止。
9.什么是局部靜態(tài)變量?它們有什么用?
答案:局部靜態(tài)變量是一個變量,其生存期并不以聲明它的函數(shù)調(diào)用結尾。它延長了整個程序的壽命。所有對該函數(shù)的調(diào)用都共享局部靜態(tài)變量的相同副本。靜態(tài)變量可用于計算調(diào)用函數(shù)的次數(shù)。另外,靜態(tài)變量的默認值為0。例如,以下程序輸出“ 0 1”
#include <stdio.h>
void fun()
{
// 靜態(tài)變量的默認值為0
static int x;
printf("%d ", x);
x = x + 1;
}
int main()
{
fun();
fun();
return 0;
}
// 輸出: 0 1
10.什么是靜態(tài)函數(shù)?它們有什么用?
答案:在C語言中,默認情況下函數(shù)是全局的。函數(shù)名稱前的“ static”關鍵字使其變?yōu)殪o態(tài)。與C中的全局函數(shù)不同,對靜態(tài)函數(shù)的訪問僅限于聲明它們的文件。因此,當我們想限制對函數(shù)的訪問時,我們將它們設為靜態(tài)。使函數(shù)成為靜態(tài)的另一個原因可能是在其他文件中重用了相同的函數(shù)名。