1. 程式人生 > >第一章:10道C/C++經典面試題

第一章:10道C/C++經典面試題

面試題 1:變數的宣告和定義有什麼區別

為變數分配地址和儲存空間的稱為定義,不分配地址的稱為宣告。

一個變數可以在多個地方宣告,但是隻在一個地方定義。

加入 extern 修飾的是變數的宣告,說明此變數將在檔案以外或在檔案後面部分定義。

說明:很多時候一個變數,只是宣告不分配記憶體空間,直到具體使用時才初始化,分配記憶體空間,如外部變數。

面試題 2:寫出 bool 、int、 float、指標變數與“零值”比較的 if 語句

bool 型資料:
[cpp] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. if( flag )  
  2. {  
  3.     A;  
  4. }  
  5. else
  6. {  
  7.     B;  
  8. }  
[cpp] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. int 型資料:  
  2. if( 0 != flag )  
  3. {  
  4.     A;  
  5. }  
  6. else
  7. {  
  8.     B;  
  9. }  
[cpp] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. 指標型數:  
  2. if( NULL == flag )  
  3. {  
  4.     A;  
  5. }  
  6. else
  7. {  
  8.     B;  
  9. }  
[cpp] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. float 型資料:  
  2. if ( ( flag >= NORM ) && ( flag <= NORM ) )  
  3. {  
  4.     A;  
  5. }  

注意:應特別注意在 int、指標型變數和“零值”比較的時候,把“零值”放在左邊,這樣當把“==”誤寫成“=”時,編譯器可以報錯,否則這種邏輯錯誤不容易發現,並且可能導致很嚴重的後果。

面試題 3:sizeof 和 strlen 的區別

sizeof 和 strlen 有以下區別:

  • sizeof 是一個操作符,strlen 是庫函式。

  • sizeof 的引數可以是資料的型別,也可以是變數,而 strlen 只能以結尾為‘\0‘的字串作引數。

  • 編譯器在編譯時就計算出了 sizeof 的結果。而 strlen 函式必須在執行時才能計算出來。並且 sizeof

  • 計算的是資料型別佔記憶體的大小,而 strlen 計算的是字串實際的長度。

  • 陣列做 sizeof 的引數不退化,傳遞給 strlen 就退化為指標了。

注意:有些是操作符看起來像是函式,而有些函式名看起來又像操作符,這類容易混淆的名稱一定要加以區分,否則遇到陣列名這類特殊資料型別作引數時就很容易出錯。最容易混淆為函式的操作符就是 sizeof。

面試題 4:C 語言的關鍵字 static 和 C++ 的關鍵字 static 有什麼區別

在 C 中 static 用來修飾區域性靜態變數和外部靜態變數、函式。

而 C++中除了上述功能外,還用來定義類的成員變數和函式。即靜態成員和靜態成員函式。
注意:程式設計時 static 的記憶性,和全域性性的特點可以讓在不同時期呼叫的函式進行通訊,傳遞資訊,而 C++的靜態成員則可以在多個物件例項間進行通訊,傳遞資訊。

面試題 5:C中的 malloc 和C++中的 new 有什麼區別

malloc 和 new 有以下不同:
  • new、delete 是操作符,可以過載,只能在 C++中使用。

  • malloc、free 是函式,可以覆蓋,C、C++中都可以使用。

  • new 可以呼叫物件的建構函式,對應的 delete 呼叫相應的解構函式。

  • malloc 僅僅分配記憶體,free 僅僅回收記憶體,並不執行構造和解構函式

  • new、delete 返回的是某種資料型別指標,malloc、free 返回的是 void 指標。

注意:malloc 申請的記憶體空間要用 free 釋放,而 new 申請的記憶體空間要用 delete 釋放,不要混用。因為兩者實現的機理不同。

面試題 6:寫一個“標準”巨集 MIN

#define min(a,b)((a)<=(b)?(a):(b))
注意:在呼叫時一定要注意這個巨集定義的副作用,

如下呼叫:((++*p)<=(x)?(++*p):(x)。p 指標就自加了兩次,違背了 MIN 的本意。

面試題 7:一個指標可以是 volatile 嗎

可以,因為指標和普通變數一樣,有時也有變化程式的不可控性。

常見例:子中斷服務子程式修改一個指向一個 buffer 的指標時,必須用 volatile 來修飾這個指標。
說明:指標是一種普通的變數,從訪問上沒有什麼不同於其他變數的特性。

其儲存的數值是個整型資料,和整型變數不同的是,這個整型資料指向的是一段記憶體地址。

面試題 8:a 和&a 有什麼區別

請寫出以下程式碼的列印結果,主要目的是考察 a 和&a 的區別。
[cpp] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <span style="font-size:18px;">#include<stdio.h>  
  2. int main( void )  
  3. {  
  4.     int a[5]={1,2,3,4,5};  
  5.     int *ptr=(int *)(&a+1);  
  6.     printf("%d,%d",*(a+1),*(ptr-1));  
  7.     return 0;  
  8. }</span>  

輸出結果:2,5。
注意:陣列名 a 可以作陣列的首地址,而&a 是陣列的指標。

思考,將原式的 int *ptr=(int *)(&a+1);改為 int *ptr=(int *)(a+1);時輸出結果將是什麼呢?

面試題 9:簡述 C、C++程式編譯的記憶體分配情況

C、C++中記憶體分配方式可以分為三種:
(1)從靜態儲存區域分配:
記憶體在程式編譯時就已經分配好,這塊記憶體在程式的整個執行期間都存在。速度快、不容易出錯,因為有系統會善後。例如全域性變數,static 變數等。


(2)在棧上分配:
在執行函式時,函式內區域性變數的儲存單元都在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。


(3)從堆上分配:
即動態記憶體分配。程式在執行的時候用 malloc 或 new 申請任意大小的記憶體,程式設計師自己負責在何時用 free 或 delete 釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活。如果在堆上分配了空間,就有責任回收它,否則執行的程式會出現記憶體洩漏,另外頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。
一個 C、C++程式編譯時記憶體分為 5 大儲存區:堆區、棧區、全域性區、文字常量區、程式程式碼區。

面試題 10:簡述 strcpy、sprintf 與 memcpy 的區別

三者主要有以下不同之處:
  • 操作物件不同,strcpy 的兩個操作物件均為字串,sprintf 的操作源物件可以是多種資料型別,目的操作物件是字串,memcpy 的兩個物件就是兩個任意可操作的記憶體地址,並不限於何種資料型別。

  • 執行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。

  • 實現功能不同,strcpy 主要實現字串變數間的拷貝,sprintf 主要實現其他資料型別格式到字串的轉化,memcpy 主要是記憶體塊間的拷貝。

說明:strcpy、sprintf 與 memcpy都可以實現拷貝的功能,但是針對的物件不同,根據實際需求,來選擇合適的函式實現拷貝功能。

相關推薦

第一10C/C++經典試題

面試題 1:變數的宣告和定義有什麼區別 為變數分配地址和儲存空間的稱為定義,不分配地址的稱為宣告。 一個變數可以在多個地方宣告,但是隻在一個地方定義。 加入 extern 修飾的是變數的宣告,說明此變數將在檔案以外或在檔案後面部分定義。 說明:很多時候一個變數,只是宣告不分配記憶體空間,直到具體使用時

mysql10mysql查詢語句試題

表結構 學生表student(id,name) 課程表course(id,name) 學生課程表student_course(sid,cid,score) 建立表的sql程式碼 ```sql create table student( id int unsigned primar

第三10C/C++經典試題

面試題 21:談談你對程式設計規範的理解或認識 程式設計規範可總結為:程式的可行性,可讀性、可移植性以及可測試性。 說明:這是程式設計規範的總綱目,面試者不一定要去背誦上面給出的那幾個例子,應該去理解這幾個例子說明的問題,想一想,自己如何解決可行性、可讀性、可移植性以及

第一程序設計和C語言

統一 c程序 集合 out 包含 有一個 機器 文件名 部分 一、什麽是計算機程序? 所謂程序就是一組計算機能識別和執行的指令。計算機的一切操作都是由程序控制的,本質是程序的機器,程序和指令是計算機系統最基本的概念。 二、什麽是計算機語言? 人和計算機交流信息要

C語言經典試題C語言面試寶典

第一部分:基本概念及其它問答題 1、關鍵字static的作用是什麼? 這個簡單的問題很少有人能回答完全。在C語言中,關鍵字static有三個明顯的作用: 1). 在函式體,一個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。 2). 在模組內(但在函式體外),一個被宣告為

10典型的JavaScript試題

開發 var int {} 還要 創建 pts 解決 mode 問題1: 作用域(Scope)   考慮以下代碼: (function() { var a = b = 5; })(); console.log(b);   上述代碼會打印出5。這個問題的陷阱就是

分享15大資料崗位試題

你認為哪個更好:是好的資料還是好模型?同時你是如何定義“好”?存在所有情況下通用的模型嗎?有你沒有知道一些模型的定義並不是那麼好?1、你處理過的最大的資料量?你是如何處理他們的?處理的結果。2、告訴我二個分析或者電腦科學相關專案?你是如何對其結果進行衡量的?3、什麼是:提升值、關鍵績效指標、強壯性、模型按合度

分享15大數據崗位試題

的區別 協同過濾 分享 模糊 str 基礎 sas 得到 reduce 你認為哪個更好:是好的數據還是好模型?同時你是如何定義“好”?存在所有情況下通用的模型嗎?有你沒有知道一些模型的定義並不是那麽好?1、你處理過的最大的數據量?你是如何處理他們的?處理的結果。2、告訴我二

新手小白必知的5Web前端經典試題

想成功就業web前端工程師,想要能高薪就業,那麼除了好的web前端技能以外,還得有好的面試技巧,如果提前就瞭解更多企業的面試要求及面試題目,那麼可以讓我們的面試成功的機率大大的提高,今天就給大家分享5道經典的web前端面試題,相信可以祝大家一臂之力。  

分享10常考Java試題及答案

Hi,大家好,今天給大家分享10道常考的Java面試題及答案,涉及到Java中的10個方面。每個領域一道題。希望你能有收穫。 <平臺無關性>什麼是平臺無關性,Java是如何做到平臺無關的? <序列化>如何自定義序列化策略 &l

10 Java 泛型試題(轉載)

本文轉載自騰訊雲社群 Java中的泛型是什麼 ? 使用泛型的好處是什麼? 這是在各種Java泛型面試中,一開場你就會被問到的問題中的一個,主要集中在初級和中級面試中。那些擁有Java1.4或更早版本的開發背景的人都知道,在集合中儲存物件並在使用前進行型別轉換

100MySQL資料庫經典試題解析(收藏版)

## 前言 100道MySQL資料庫經典面試題解析,已經上傳github啦 > https://github.com/whx123/JavaHome/tree/master/Java%E9%9D%A2%E8%AF%95%E9%A2%98%E9%9B%86%E7%BB%93%E5%8F%B7 **公眾號

C++程式語言設計-第一緒論

第一章 緒論 計算機系統簡介 計算機語言和程式設計方法的發展 計算機語言的發展歷程 程式設計語言的發展歷程 面向物件的基本概念 程式的開發過程 資訊的表示和儲存 計算機中的資訊與儲存單位 計

第一初識C語言

一、初識C語言1、C語言簡介 C語言一經出現就以其功能豐富、表達能力強、靈活方便、應用面廣等特點迅速在全世界普及和推廣。C語言不但執行效率高而且可移植性好,可以用來開發應用軟體、驅動、作業系統等。C語言也是其它眾多高階語言的鼻祖語言,所以說學習C語言是進入程式設計世界的必修課

VIR via C#第一CLR的執行模型

什麼是CLR:          CLR是微軟為.net的虛擬機器取得名字。它定義可一個程式碼執行的環境(就相當於基於window上的小型的作業系統)          CLS:支援CLR的各種語言之間,有各種不同的特性和語法。為了支援各種語言之間的互操作性。      

CLR via C#第一通用型別系統(CTS)

CLR完全是圍繞型別展開的,型別為應用程式和其他型別公開了功能,通過型別,兩種不同的程式語言之間能夠相互溝通。所以,Microsoft制定了一個正式的規範(CTS),他描述了型別的定義和行為。

C#與.NET3.0高階程式設計》摘要-----第一 .NET之

第一章 .NET之道 一、.NET框架的一些核心功能 1、對已有具有完全的互操作性     已有的COM二進位制元件可以和更新的.NET二進位制元件共存,反之亦然。利用平臺呼叫(PInvoke)服務可以在.NET的程式碼裡呼叫基於C的庫。 2、完全的語言整合     支援跨語言繼承、跨語言異常處理和跨語言的

《深度探索C++物件模型》讀書筆記第一關於物件

有點尷尬,這個筆記已經記過一遍了。重新來過的原因是我讀到第五章左右覺得自己對這本書認識不夠深刻,暫時就沒有記筆記。今天正式把書通讀了一遍了,然後現在讀第二遍,這一遍我每章都會寫一篇部落格總結,只總結重點,精要,所以會簡短一些。我會以條款的形式來總結。 從C到C++,使

C++第一輸出Hello World

cout iostream space char str name urn pre include #include <stdafx.h> #include <iostream> using namespace std; int _tm

Linux下C語言的幾經典試題

ref 使用 linu 學習資源 chan ima 什麽 img c語言 本篇文章整理了幾道Linux下C語言的經典面試題,相信對大家更好的理解Linux下的C語言會有很大的幫助,歡迎大家探討指正。 1、如果在Linux下使用GCC編譯器執行下列程序,輸出結果是什麽? 答