int func(int x)
return countx;
}
思路:將x轉化為2進製,看含有的1的個數。答案是8.。
const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤(邊際效應) 。
有些整合化的除錯工具可以對 const 常量進行除錯,但是不能對巨集常量進行除錯。
void main()
; int *ptra = (int *)(a + 1);
int *ptrb=(int *)(&a+1);
cout << *(a + 1) << " " << *(ptra- 1)<<" "<<*(ptrb-1) << endl;//輸出2 1 5
}
用法不同:typedef用來定義一種資料型別的別名,增強程式的可讀性。define主要用來定義常量,以及書寫複雜使用頻繁的巨集。
常量型別的函式只有權讀取外部資料內容,但無權修改他們。
格式《型別說明符》《函式名》(《參數列》)const;
當乙個函式被const說明後,其函式**現的對外部資料的任何寫入或修改都將被系統檢查為出錯。如果把函式writeme()說明為:
void writeme(int i) const
系統將會檢查出錯誤。
作用當函式體較大且複雜時,如果我們希望系統幫助避免對物件內容進行修改,那麼我們就會將這個函式定義為常量型函式,這就是使用它的主要目的。
map的實現
stl中map的實現是基於rbtree。
vector的實現
vector通過乙個連續的陣列存放元素,如果集合已滿,在新增資料的時候,就要分配一塊更大的記憶體。
從邏輯結構上來說,這兩種資料結構都屬於線性表
空類增加乙個一位元組的啞成員來佔位。c++中規定無資料成員的結構有最小的非零長度,為了防止與他相鄰的資料物件有相同的位址。
主要處理#開始的預編譯指令,預編譯指令指示了在程式正式編譯前就由編譯器進行的操作。預編譯又稱為預處理 , 是做些**文字的替換工作。
char str1=
"abc"
;char str2=
"abc"
;const
char str3=
"abc"
;const
char str4=
"abc"
;const
char
*str5 =
"abc"
;const
char
*str6 =
"abc"
;char
*str7 =
"abc"
;char
*str8 =
"abc"
; cout <<
(str1 == str2)
<< endl;
//0 cout <<
(str3 == str4)
<< endl;
//0 cout <<
(str5 == str6)
<< endl;
//1 cout <<
(str7 == str8)
<< endl;
//1
str1,str2,str3,str4是陣列變數,他們有各自的記憶體空間;而str5,str6,str7,str8是指標,他們指向相同的常量區域。
#include
using
namespace std;
void
fun(
char str)
intmain()
sizeof如用於陣列,只能測出靜態陣列的大小,無法檢測動態分配的或外部陣列的大學。函式外的str是乙個靜態定義的陣列,因此其大小為6,因為還有『\0』,函式內的str實際只是乙個指向字串的指標,沒有任何額外的與陣列相關的資訊,因此sizeof作用於上只將其當指標看,乙個指標為4個位元組,因此返回4。
int
main()
沒有為str分配記憶體空間,將會發生異常。問題出在將乙個字串複製進乙個字元變數指標所指位址。雖然可以正確輸出結果,但因為越界進行內在讀寫而導致程式崩潰。
char
*s =
"aaaa"
;printf
("%s"
, s)
; s[0]
='b'
;printf
("%s"
, s)
;
對是s[0]的賦值操作是不合法的,修改字元常量的值是不合法的。
``cpp
while(1)
```cpp
for(;;)
當要求使用volatile宣告變數值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。精確地說就是,遇到這個關鍵字宣告的變數,編譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊位址的穩定訪問;如果不使用valatile,則編譯器將對所宣告的語句進行優化。
1>告訴compiler不能做任何優化。
2>用volatile定義的變數會在程式外被改變,每次都必須從記憶體中讀取,而不能重複使用放在cache或暫存器中的備份。
答:共享儲存系統、訊息傳遞系統、管道:以檔案系統為基礎
答:資源競爭及程序推進順序非法;互斥、請求保持、不可剝奪、環路
答:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖
答:fcfs(先來先服務),優先順序,時間片輪轉,多級反饋
答:應用層、表示層、會話層、運輸層、網路層、物理鏈路層、物理層 tcp/udp屬於運輸層
tcp服務提供了資料流傳輸、可靠性、有效流控制、全雙工操作和多路復用技術等。 與tcp 不同, udp並不提供對ip協議的可靠機制、流控制以及錯誤恢復功能等。由於udp比較簡單,udp頭包含很少的位元組,比tcp負載消耗少
tcp: 提供穩定的傳輸服務,有流量控制,缺點是包頭大,冗餘性不好 udp: 不提供穩定的服務,包頭小,開銷小
unsigned
short a =10;
printf
("~a=%u\n"
,~a)
;//~a=4294967285
char c =
128;
printf
("c=%d\n"
, c)
;//c=-128
第一題,~a =0xfffffff5, int值為-11,但輸出的是uint。所以輸出4294967285。
第二題,char是有符號的,c=0x80,輸出的是int,最高位為1,是負數,所以它的值就是0x00的補碼就是128,所以輸出-128。
答:c用巨集定義,c++用inline
typedef
union
date;
struct data too;
date max;
printf
("%d\n"
,sizeof
(too)
+sizeof
(max));
//20+32=52
#include
#include
#define int(x) (x-'0')
#define ch(x) (x+'0')
char a[
101]
;char b[
101]
;char result[
200]
;int
main()
result[
199- i - sizea]
+= rest;
}int n =0;
while
(n <
200&& result[n]==0
)if(n ==
200)
else
printf
("\n");
}}return0;
}
C 面試題目彙總
寫這篇文章的初衷 平時在實驗室用的都是linux系統的ubuntu版本,想儲存一下c 面試相關的題目及答案的時候,沒辦法用office套件記錄,就用寫部落格的方式記錄吧,殊途同歸。文章持續更新中 const比 define好。首先,它能夠明確指定型別,能夠在編譯階段進行型別檢查,而 define只是...
C 面試題目彙總
動態記憶體分配 malloc與new的區別 c 中的 new delete 和 new delete c 智慧型指標詳解 c 傳值呼叫與引用呼叫的區別 c 拾遺 從記憶體布局看c 虛繼承的實現原理 c 虛基類的實現機制 筆記 c 虛繼承實現原理 虛基類表指標與虛基類表 什麼是多型?為什麼要使用多型?...
面試題目彙總
磁碟快取最好是把 sqlite 和檔案儲存結合起來 key value 元資料儲存在 sqlite 中,而 value 資料則根據大小不同選擇 sqlite 或檔案儲存。複製 自己封裝乙個網路,如果離開a頁面去了b頁面,那麼a頁面的網路請求怎麼立即取消 複製 分流三種。1,集群 將併發請求分配到不同...