1. C 語言的 malloc 和 C++ 中的 new 有什么區(qū)別?
2.?簡述strcpy、sprintf 與memcpy 的區(qū)別?
3. 什么是函數(shù)指針?
函數(shù)指針的定義方式為:
函數(shù)返回值類型 (* 指針變量名) (函數(shù)參數(shù)列表);
“函數(shù)返回值類型”表示該指針變量可以指向具有什么返回值類型的函數(shù);“函數(shù)參數(shù)列表”表示該指針變量可以指向具有什么參數(shù)列表的函數(shù)。這個參數(shù)列表中只需要寫函數(shù)的參數(shù)類型即可。
函數(shù)指針的定義就是將“函數(shù)聲明”中的“函數(shù)名”改成“(*指針變量名)”。但是這里需要注意的是:“(*指針變量名)”兩端的括號不能省略,括號改變了運(yùn)算符的優(yōu)先級。如果省略了括號,就不是定義函數(shù)指針而是一個函數(shù)聲明了,即聲明了一個返回值類型為指針型的函數(shù)。
那么怎么判斷一個指針變量是指向變量的指針變量還是指向函數(shù)的指針變量呢?首先看變量名前面有沒有“*”,如果有“*”說明是指針變量;其次看變量名的后面有沒有帶有形參類型的圓括號,如果有就是指向函數(shù)的指針變量,即函數(shù)指針,如果沒有就是指向變量的指針變量。
最后需要注意的是,指向函數(shù)的指針變量沒有 ++ 和 -- 運(yùn)算。
4. C語言的指針和引用和c++的有什么區(qū)別?
1) 指針有自己的一塊空間,而引用只是一個別名;
2) 使用sizeof看一個指針的大小是4,而引用則是被引用對象的大?。?/p>
3) 作為參數(shù)傳遞時,指針需要被解引用才可以對對象進(jìn)行操作,而直接對引用的修改都會改變引用所指向的對象;
4) 可以有const指針,但是沒有const引用;
5) 指針在使用中可以指向其它對象,但是引用只能是一個對象的引用,不能被改變;
6) 指針可以有多級指針(**p),而引用止于一級;
7) 指針和引用使用++運(yùn)算符的意義不一樣;
8) 如果返回動態(tài)內(nèi)存分配的對象或者內(nèi)存,必須使用指針,引用可能引起內(nèi)存泄露。為什么?
(new?出來的對象?是個地址,以后delete?也要這份地址,但是不可以delete?引用。這個不是必須使用指針,是new返回的就是指針,指向內(nèi)存的地址。設(shè)計上?指針是為了兼容C而存在 ,引用是為了重載而存在。)
