C和C 面試秘笈一 C和C 程式基礎

2021-08-19 10:47:09 字數 2100 閱讀 5692

一、c++域操作符

首先看下面的這一段**

#include int value = 0;

void printvalue()

int main()

如果我們直接編譯,編譯器會報錯,因為這是乙個c檔案,在c語言中還沒有域操作符(::),但是只要我們改變了標頭檔案。寫成c++檔案,然後編譯就可以正常輸出了。輸出的結果是

value = 1

value = 2

本題的主要考點就是:

1、域操作符,域操作符是c++才加上的。

2、變數的作用域。

第乙個value是全域性變數,它的作用域是整個程式,然後又在main函式中定義了乙個value,這是乙個區域性變數,這個變數會遮蔽同名的全域性變數。所以在main函式裡列印的就是value  = 1。如果我們想用全域性變數的value, 我們就得用域操作符來訪問全域性變數的value。

二、i++和++i的區別

i++ : 先使用i的值,i再自增

++i : i先自增, 再使用i自增之後的值。

兩個版本的效率問題

如果使用的是基本的資料型別,兩者的效率相同。

但是如果使用自己建立的資料型別,比如類,那麼就是前置版本的效率高。因為前置版本可以直接返回物件的引用,但是後置版本需要反對物件的值,在返回的過程中會產生臨時變數,需要複製,這樣會產生較大的開銷。

三、有符號數和無符號數之間的轉換

在進行運算的時候我們需要注意運算物件的資料型別,如果不注意可能會出現意想不到的**煩。

我們來看下面這個例子

#include char getchar(int x, int y)

int main(void)

上面乙個函式的作用判斷傳進來的兩個數相加是否大於10,但是這個時候我們需要注意加號運算子的兩個運算物件。閱讀上面的**可知,a是乙個unsigned int型別的,但是y的型別確實int型別的,這個時候回出現型別轉換,有符號型別的轉為無符號型別的。

有符號數轉為無符號數

如果第一位不是1,那麼無符號數就和原來的有符號數相同。

如果第一位是1, 那麼將有符號數取補碼,得到的數就是無符號數。

無符號數轉為有符號數

如果第一位不是1,那麼有符號數就和原來的無符號數相同。

如果第一位是1,那麼將無符號數取補碼,最後得到的數的第一位是符號位,其餘的幾位是這個有符號數的數值。

四、三種不同的交換的變數的方法

1、用乙個中間變數。這也是大家常用的方法

void swap1(int &a, int &b)

2、使用加減法來交換兩個變數的值,這就不要借助中間變數了

void swap2(int &a, int &b)

3、使用按位運算子來交換兩個變數,這個方法也不需要借助中間變數

void swap3(int &a, int &b)

【注意】:

以上的傳參都是引用傳參的方式。

五、c和c++的區別和聯絡

區別

c和c++最主要的區別就是程式設計的思想不一樣

c是面向過程程式設計

c++是物件導向程式設計

聯絡

我們也可用c++寫出面向過程的程式,所以c++是c的超集。c++在c的基礎上引入了類,過載、虛函式、模板和容器等。

六、#include和#include「head.h」的區別

#include表示這個標頭檔案是乙個標準標頭檔案,編譯器會在標準位置尋找這個檔案,如果沒有找到,編譯器就會報錯。

#include"head.h"表示這個標頭檔案是我們自己定義的乙個標頭檔案,編譯器首先會在我們的工程目錄或者我們制定的位置尋找這個標頭檔案,如果沒有找到就會到標準位置找這個標頭檔案,如果還是沒有找到,那麼編譯器也會報錯。

C和C 程式設計師面試秘笈

本系列部落格基於董山海的zywang shu.edu.cn 第一章 c c 程式基礎 賦值語句 位運算與邏輯運算以及三元操作符的區別 c 域操作符,注意全域性變數和區域性變數的區別 i i i 先 i ii 自增 1 11,然後再列印 iii i i i 先列印 i ii,再 i ii 自增 111...

《C和C 程式設計師面試秘笈》中存在的錯誤

最近在複習c 面試的考點,所以購買了 c和c 程式設計師面試秘笈 這本書 人民郵電出版社2014.3 isbn 978 7 115 34113 6 因為我只選擇性的看了第1 2 3 5 6 7章 全文共12章 所以本文只列出了這幾個章節中存在的錯誤。頁碼面試題編號 存在的錯誤 p15面試題11 只會...

C和C 面試秘笈三 引用和指標(1)

引用是c 引入的新語言特性,正確 靈活地使用引用,可以使程式簡潔高效。一 一般變數的引用 引用只是給變數起了乙個別名,它們兩個儲存在同乙個儲存單元,具有同一位址。來看下面的 int a 10 int b 20 int rn a int equal rn b cout a a endl cout b ...