1,“常量”與“唯讀變數”的區別
常量是編譯器放在記憶體中的唯讀地區,“唯讀變數”在記憶體中開闢一個地區存放它的值,編譯器限定不允許修改。
2,const與 define的區別
const:限定一個“變數”不允許被改變。可以提高程式安全性、可靠性。const編譯時間進行安全類型檢查。“意味著唯讀” 錯誤:“意味著常量”
define 用來定義“常量”,編譯結束後就消失了,不開闢記憶體空間。define 沒有類型檢查,只是單純的替換,所以不夠安全。
例子:const int n=5; int a[n]; 是不對的,原因是:數組長度必須要定義成常量。而const 修飾的是一個變數。但是 const int *ptr; ptr++ 是正確的,而const int ptr; ptr++ 是錯誤的。原因是:第一個限定*ptr不可以變,第二個才是限定ptr不可以變。
3,分配記憶體時為什麼記憶體不會重疊(地址分配是相對還是絕對的)?
不太懂
4,postmessage和sendmessage作用以及區別?
postmessage:該函數將一個訊息放入(寄送)到與指定視窗建立的線程相聯絡訊息佇列裡,不等待線程處理訊息就返回,是非同步訊息模式。訊息佇列裡的訊息通過調用GetMessage和PeekMessage取得.
sendmessage:該函數將指定的訊息發送到一個或多個視窗。此函數為指定的視窗調用視窗程序,直到視窗程序處理完訊息再返回。而函數PostMessage不同,將一個訊息寄送到一個線程的訊息佇列後立即返回。
簡單講:postmessage 發送到視窗建立的訊息佇列就返回,而sendMessage等待處理完返回。
5,進程間的通訊方式,線程的同步方法?
處理序間通訊方式: 訊號,訊號量,訊息佇列,共用記憶體。
線程同步方法:1)臨界區,多線程序列化訪問公用資源或代碼。
2)互斥量,為協調多個對象對同一資源的單獨訪問
3)訊號量,控制一個具有數量限制的資源訪問設計
4)時間,通知線程有一些時間已經發生,從而啟動後繼任務的開始
6,socket編程的實現步驟。
服務端:建立通訊端(IP/Port)
設定通訊端為監聽狀態
請求到來後,建立串連
響應請求,發送回覆
關閉通訊端
接收端:建立通訊端
向服務端發送請求
處理服務端返回資訊
關閉通訊端
7,windows的訊息處理機制(處理過程)(這個問題頻率最高了,別漏了訊息迴圈,訊息佇列)
訊息系統由 訊息佇列、訊息迴圈、視窗過程組成
處理過程為:時間出發後發送訊息到 <訊息佇列> <訊息迴圈>到訊息佇列中取出訊息交給對應的視窗處理。
8,a[3] = "abc" 合法嗎?使用它有什麼隱患?
在標準C中這是合法的,但是它的生存環境非常狹小;它定義一個大小為3的數組,初始化請問char
為"abc",注意,它沒有通常的字串終止符'\0',因此這個數組只是看起來像C語言中的字串,實質上卻不是,因此所有對字串進行處理的函數,比如strcpy、printf等,都不能夠被使用在這個假字串上。