C 常見面試題目

2022-04-04 00:09:43 字數 3069 閱讀 3770

const作用

(1)可以定義const常量,具有不可變性。 

(2)便於進行型別檢查。(而巨集不會進行型別檢查)。

(3)可以保護被修飾的東西,防止意外的修改。

(4) 可以節省空間。

static作用

1.隱藏:乙個檔案中的全域性變數在另外乙個檔案中使用extern宣告就能使用,宣告了static就不能了

乙個函式內的static變數具有全域性生命期,但只在這個函式中可見

2.記憶功能和全域性生存期

3.預設初始化為0

4.類的靜態成員函式是屬於整個類而非類的物件,所以它沒有this指標

5.不能將靜態成員函式定義為虛函式。

6.不可以同時用const和static修飾成員函式。

什麼函式不能宣告為虛函式

1:只有類的成員函式才能說明為虛函式;

2:靜態成員函式不能是虛函式;

3:內聯函式不能為虛函式;

4:建構函式不能是虛函式;

5:析構函式可以是虛函式,而且通常宣告為虛函式。

指標和引用的區別

而引用只是乙個別名,還是變數本身。對引用進行的任何操作就是對變數本身進行操作,因此以達到修改變數的目的。

1.引用必須被初始化,指標不必

2.引用初始化以後不能被改變,指標可以改變所指的物件。

3.不存在指向空值的引用,但是存在指向空值的指標。

4."sizeof引用"得到的是所指向的變數(物件)的大小,而"sizeof指標"得到的是指標本身的大小

封裝、繼承、多型

封裝:將客觀事物抽象成類,每個類對自身的資料和方法實行訪問控制

繼承:**復用,可以使得**模組化,擴充套件已存在的**

多型:乙個介面,多種方法,程式在執行時才決定呼叫的函式, 作用:介面重用

這個類的每乙個物件都會包含乙個虛指標,指向虛函式表,通過某個型別的指標訪問某個成員時,編譯器只是根據型別的定義查詢這個成員所在偏移量,用這個偏移量獲取成員

純虛函式(抽象類

方法:virtual returntype function()=0;

該基類只做能被繼承,而不能被例項化

這個方法必須在派生類中被實現

結構體、聯合

#include "

stdafx.h

"#include

using

namespace

std;

union u ;

#pragma pack(2)//

指定對齊位元組數

struct mystruct //

每個成員都有自己獨立的位址

;#pragma pack()//

恢復預設,一般是8

//位元組對齊數 按結構塔中最大成員的位元組數 和 設定數 取小值

//則按2位元組 對齊

intmain()

; printf(

"1.%c %x\n

", a.c, a.i);

a.c = 'b'

; printf(

"2.%c %x\n

", a.c, a.i);

a.i = 0x0143

; printf(

"3.%c 4.%d\n

", a.c, a.i);

//大端(儲存)模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中

//小端(儲存)模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中

int num = 1

;

char *p = (char*)#

if (*p == 1

) cout

<< "小端"

cout

<< "大端"

;

if (a.c == 1

) cout

<< "小端"

cout

<< "大端"

cout

<< sizeof(st) << endl; //

指定了#pragma pack(2)則為8, 沒有則12

return0;

}

記憶體管理

void getmemory1(char *p)

void test1()

//str一直是空,程式崩潰,p作為形參,是str的副本,申請了記憶體,但str並未改變

char *getmemory()

void test2()

可能是亂碼

p陣列為函式內的區域性變數,在函式返回後,記憶體已經被釋放

void getmemory(char **p, int num)

void test3()

列印hello,

未對malloc的記憶體進行釋放

getmemory中申請記憶體後應加上if ( *p == null ),以進行記憶體分配失敗的處理

void test4(void)

}可能會列印world,

free(str);之後未將str賦值為null,str為野指標

在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可以用於申請動態記憶體和釋放記憶體。

對於非內部資料型別物件而言,光用malloc/free無法滿足動態物件的要求。

物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。

由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free.

常見面試題目3

q 您在什麼情況下會用到虛方法?它與介面有什麼不同?q override與過載有什麼區別?q 值型別與引用型別有什麼區別?q 怎樣理解靜態變數?q 向伺服器傳送請求有幾種方式?q datareader與dataset有什麼區別?q 用.net做b s結構的系統,您是用幾層結構來開發,每一層之間的關係...

Spring常見面試題目

1.使用spring框架的好處是什麼?輕量 spring 是輕量的,基本的版本大約2mb。控制反 spring通過控制反轉實現了鬆散耦合,物件們給出它們的依賴,而不是建立或查詢依賴的物件們。面向切面的程式設計 aop spring支援面向切面的程式設計,並且把應用業務邏輯和系統服務分開。容器 spr...

C 常見面試題

1.c中static有什麼作用 1 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性,故使用static在不同的檔案中定義同名函式和同名變數,而不必擔心命名衝突。2 static的第二個作用是保持變數內容的持久。儲存在靜態資料區的變數會在程式剛開始執行時就...