面試題目總結一

2021-10-06 06:41:54 字數 4137 閱讀 1390

指標常量(pointer to const):不能修改指向變數的值,int const *p

常量指標(const pointer):不能改變指向,不能指向常量,int *const p

指向常量的常量指標(const pointer to const):不能改變指向,可以指向常量,const int *const p

其中常量是指不能修改。

主要區別:

(1)作用域;

(2)引數列表。

不能過載的情況:

(1)函式只有返回值不同;

(2)語意不明,函式引數列表出現多個匹配。

建構函式:(類間按照繼承順序構造,成員間按宣告順序)

(1)虛擬基類的建構函式;

(2)非虛擬基類的建構函式;

(3)設定虛函式表指標值;

(4)成員物件的建構函式;

(5)類本身的建構函式。

析構函式:由於採用函式棧的形式,因此,析構順序與構造順序相反。

(1)#:返回字串

(2)##:表示子串連線

例如:#define conn(x,y) x##y

(3)#@:返回const char

定義和性質區別

指標:指標是乙個變數,儲存的是乙個記憶體位址,指向記憶體的乙個儲存單元;通過指標獲取這個指標指向的記憶體中的值稱為解引用;引用:是原變數的乙個別名(同義詞),引用跟原來的變數實質上是同乙個東西,它儲存著所指物件的儲存位址,並且使用的時候會自動解引用。int a = 1; int *p = &a;int &s = a;其中,p是指標變數,該指標變數指向整型變數a的儲存單元,即p的值是a儲存單元的位址;s是整型變數a的引用,a與b在記憶體中占用同一儲存單元

引用不可以為空,當被建立的時候必須初始化,而指標可以是空值,可以在任何時候被初始化。

指標可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的)

作為引數傳遞時,指標需要被解引用才可以向物件進行操作,而直接對引用的修改都會改變引用所指向的物件。

指標的值可以為空,但是引用的值不能為null,並且引用在定義的時候必須初始化;

指標的值在初始化後可以改變,即指向其它的儲存單元,而引用在進行初始化後就不會再改變了。

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

如果返回動態記憶體分配的物件或者記憶體,必須使用指標引用可能引起記憶體洩漏;

可以有const指標,但是沒有const引用

指標引用的自增(++)運算意義不一樣。

作為函式引數的區別

函式使用指標傳遞引數,可以實現對實參進行改變的目的,是因為傳遞過來的是實參的位址。

// 函式定義

void

swap_int

(int

*a,int

*b)void

test_int

(int

*p)// 傳指標

void

test_cite

(int

&a)//傳引用

void

test_int_cite

(int

*&p)

// 傳指標的引用

intmain()

*a和*b實際上是儲存實參的記憶體單元裡的資料,即是對實參進行改變可以達到目的。

test_int函式傳遞的是位址,只不過傳遞的是指標的位址(變數的位址)。當把指標作為引數進行傳遞時,也是將實參的乙個拷貝傳遞給形參,即上面程式main函式中的p和test函式中使用的p不是同乙個變數,儲存2個變數p的單元也不相同(只是2個p指向同乙個儲存單元),那麼在test_int函式中對p進行修改,並不會影響到main函式中的p的值。如果要想達到也同時修改的目的的話,就得使用引用了.

引用作為函式引數進行傳遞時,實質上傳遞的是實參本身,即傳遞進來的不是實參的乙個拷貝,因此對形參的修改其實是對實參的修改,所以在用引用進行引數傳遞時,不僅節約時間,而且可以節約空間。

如果需要同步修改主函式和函式體中的指標變數,就得使用引用。

三種建立類物件的方式:

1、 new建立類物件

new建立類物件需要類指標接收

2、不用new,直接使用類定義申明

3、類指標+new

(1)先定義類指標,在new之前並未為該類物件分配任何記憶體空間,因此如果未經過物件初始化則不需要delete釋放;

(2)再使用的時候new。

#include

classa~

a()}

;int

main()

建構函式返回值的問題(???)

如果乙個函式的返回值是引用型別(陣列,物件或者函式)的資料,那麼這個函式作為建構函式用new運算子執行構造時,運算的結果將被它的返回值取代,這時候,建構函式體內的this值丟失了,取而代之的是被返回的物件;

題目描述:給定一字串,從中找出重複出現的字元,並返回首次重複的下標。

python:

def

find_char_in_string

(str):

""" characters are stored in dictionary

format of dictionary :

dict_char =

"""dict_char =

for i, char in

enumerate

(str):

if char in dict_char:

dict_char[char][0

]+=1 dict_char[char]

else

: dict_char.update(

)# dict_char[char] = [1, i]

return dict_char

if __name__ ==

'__main__'

: s =

'&acs1234^3123$%^&$#'

d = find_char_in_string(s)

for key, value in d.items():

if value[0]

>1:

print

("{}:{}"

.format

(key, value[2]

))

c++:

#include

#include

#include

#include

using

namespace std;

void

count_char_in_string

(string s, map<

char

, vector<

int>>

&m));}

else}}

intmain()

面試題目總結一

面試是需要時間準備的,如果茫然的就去,很容易碰釘子。即使你做過的專案,細問也有不會的。一 nand flash相關驅動知識 mtd memory technology device 記憶體技術裝置 linux層次結構為 裝置節點 裝置層 字元裝置mtdchar.c和塊裝置mtdblk.c 原始裝置層...

面試題目總結

1.char p和char p的區別。1 char getstring void void main 2 char getstring void void main 為什麼 1 輸出的是亂碼,2 能夠輸出 hello world?hello world 作為靜態字串實際上儲存在文字常量區 參見 棧和...

面試題目總結

二叉樹相關面試題目 結點資料結構 typedef struct treenode 1.二叉樹的前序遍歷 遞迴void preorder treenode root vector res 非遞迴 vectorpreorder treenode root else 2.二叉樹中序遍歷 遞迴void mi...