Time of Update: 2017-01-18
有很多地方需要這樣的功能模組,如系統的日誌輸出,GUI應用必須是單滑鼠,MODEM的聯結需要一條且只需要一條電話線,作業系統只能有一個視窗管理器,一台PC連一個鍵盤。 單例模式有許多種實現方法,在C++中,甚至可以直接用一個全域變數做到這一點,但這樣的代碼顯的很不優雅。
Time of Update: 2017-01-18
一、普通Singleton複製代碼 代碼如下:#include<iostream>using namespace std;class Singleton{ public: static Singleton* getInstance();
Time of Update: 2017-01-18
複製代碼 代碼如下:// hello.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"int _tmain(int argc, _TCHAR* argv[]){ FILE *file1,*file2; file1=fopen("047facesmall.obj","r");
Time of Update: 2017-01-18
通過觀察發現矩陣的下標有這樣一個規律:a行遞增後b列遞增然後c行遞減再d列遞減,但是對應值卻是逐漸增加的。因此可用4個迴圈實現,需要注意的是在賦值時不要把之前的值覆蓋了。所以在這裡選擇相同顔色部分賦值,代碼如下:複製代碼 代碼如下:#include <iostream>#include <iomanip>using namespace std;// 輸出螺旋矩陣void Matrix(){ const int size = 10; //
Time of Update: 2017-01-18
c:複製代碼 代碼如下:#include<stdio.h>int main(int argc,char* argv[]){ char test[]="c語言輸出重新導向測試"; int i; if (freopen("F:\\雜檔案\\test.txt", "w", stdout)==NULL)
Time of Update: 2017-01-18
複製代碼 代碼如下:#include<stdio.h>#include<windows.h>void FindFile(char* ,char* );int count=0;//統計檔案數char fname[32];#define BUFSIZE 256int main(int argc,char* argv[]){ char szLogicalDriveStrings[BUFSIZE]
Time of Update: 2017-01-18
可變參數的實現要解決三個問題:1.如何調用帶有可變參數的函數2.如何編譯有可變參數的程式3.在帶有可變參數的函數體中如何持有可變參數第一個問題, 調用時在可以傳入可變參數的地方傳入可變參數即可,當然,還有一些需要注意的地方,後面會提到。第二個問題,編譯器需要在編譯時間採用一種寬鬆的檢查方案,,這會帶來一些問題, 比如對編程查錯不利。第三個是我在這裡要關心的問題,先以C語言為例分析其實現原理。printf和scanf是C語言標準庫中最常見的可變參數函數, printf的簽名是複製代碼
Time of Update: 2017-01-18
1.this指標,就是一個指向當前對象的指標。我們知道,定義出一個類,它在記憶體中是不佔空間的,只有定義了該類類型的對象時,系統就會為該對象分配一段儲存空間,這段空間裡只儲存成員變數,對於成員函數,是存放在代碼區的。(複習:記憶體分為5大區:靜態區、常量區、棧、堆、代碼區)。下邊給出一個日期類,通過這個執行個體,深度理解this指標。#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;class Date
Time of Update: 2017-01-18
C99中新增加了restrict修飾的指標:由restrict修飾的指標是最初唯一對指標所指向的對象進行存取的方法,僅當第二個指標基於第一個時,才能對對象進行存取。對對象的存取都限定於基於由restrict修飾的指標運算式中。 由restrict修飾的指標主要用於函數形參,或指向由malloc()分配的記憶體空間。restrict資料類型不改變程式的語義。編譯器能通過作出restrict修飾的指標是存取對象的唯一方法的假設,更好地最佳化某些類型的常式。
Time of Update: 2017-01-18
下面列出的特性未必奇怪,有的算是有趣。1)a[2] 等價於 2[a]"aabbccdd"[5] 等價於 5["aabbccdd"]這條特性可以用於使用數組、指標、字串,但不能用在變數定義時。K&R C Programming language 217頁對此有介紹。2)二元、三元複合字元http://en.wikipedia.org/wiki/Digraphs_and_trigraphs字串字面值??!將被認為是|,所以兩個問號同時出現在字串的時候一定要小心。二元複合字元在C99被引入,如<
Time of Update: 2017-01-18
雖然在任何進位數種, 0 只有一個值——那就是「零」,之所以問這個問題,純粹是閑著蛋疼。最近和朋友們討論關於數的話題,他說,八位元現在幾乎從未使用過。 我一時無法反駁,確實,除了我們經常使用的十進位,在電腦中用的最多的就是二進位和十六進位了,八位元確實很“小眾”。等我回到家仔細一琢磨,八進位,八進位,「八進位就是以 0 開頭的數字」,咦,那 0 算嗎?0 也是以 0 開頭的數字啊!如果 0 是八進位的話,那麼我們幾乎每天都在使用八位元。
Time of Update: 2017-01-18
http://stevenkobes.com/ctest.html在這個網站上發現一套很有趣的C語言測試題,如果你招聘C語言相關開發人員,或者正在學習C語言,很值得做一做。如果沒有做,下面內容暫時不要看,最好自己先完成一遍。OK,假設你做的答案沒有完全正確,那你可以繼續看下去了,否則,後面內容對你來說就是小菜一碟,不值得看。第一題:#include <setjmp.h>static jmp_buf buf;int main(void){volatile int b = 3;if
Time of Update: 2017-01-18
1. 如果一個類B在文法上繼承(extend)了類A, 那麼在語義上類B是一個類A.2. 如果一個類B在文法上實現了(implement)介面I, 那麼類B遵從介面I制定的協議.使用abstract class的根本原因在於, 人們希望通過這樣的方式, 表現不同層次的抽象. 而interface的本質是一套協議. 在程式設計的發展中, 人們又發現介面可以用來表示對行為的抽象, 不過, 這隻是interface的一種用法不是其本質.理論結合實際才是最好的學習方式, 不過在這裡,
Time of Update: 2017-01-18
1.冒泡法:這是最原始,也是眾所周知的最慢的演算法了。他的名字的由來因為它的工作看來象是冒泡: 複製代碼 代碼如下:#include <iostream.h> void BubbleSort(int* pData,int Count) { int iTemp; for(int i=1;i<Count;i++) { for(int j=Count-1;j>=i;j--) {if(pData[j]<pData[j-1]) { iTemp = pData[j-1];
Time of Update: 2017-01-18
最近在看進程間的通訊,看到了fork()函數,雖然以前用過,這次經過思考加深了理解。現總結如下:1.函數本身 (1)標頭檔 #include<unistd.h> #include<sys/types.h> (2)函數原型 pid_t fork( void); (pid_t 是一個宏定義,其實質是int 被定義在#include<sys/types.h>中) 傳回值: 若成功調用一次則返回兩個值,子進程返回0,父進程返回子進程ID;否則,出錯返回-
Time of Update: 2017-01-18
數學庫函式宣告在 math.h 中,主要有:1、abs(x) 求整型數x 的絕對值2、cos(x) x(弧度)的餘弦3、fabs(x) 求浮點數x 的絕對值4、ceil(x) 求不小於x 的最小整數5、floor(x) 求不大於x 的最小整數6、log(x) 求x 的自然對數7、log10(x) 求x 的對數(底為10)8、pow(x, y) 求x 的y 次方函數說明:pow()用來計算以x為底的y次方值,即xy值,然後將結果返回。傳回值:返回x的y次方計算結果。9、sin(x)
Time of Update: 2017-01-18
1.大端模式,是指資料的低位儲存在記憶體的高地址中,而資料的高位,儲存在記憶體的低地址中;小端模式相反 2.為什麼有大小端之分??? 因為在電腦系統中,儲存是以位元組為單位的,每個地址單元都對應著一個位元組,一個位元組=8bit。在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器)。對於位元大於8位的處理器,例如16位或者32位的處理器,由於寄存器寬度大於一個位元組,如何安排多個位元組的儲存,這就有了大端儲存模式和小端
Time of Update: 2017-01-18
1. 用Microsoft Visual C++ 6.0編譯的程式,或者發布在Windows 2000/NT/ME/98 系統單純通過拷貝MSVCRxx.DLL檔案到應用程式目錄或system32目錄即可2. 用Visual Studio 2005以上編譯的程式,且發布在Windows XP及以上系統為了減少DLL引發的配置問題(DLL hell),C和C++運行時由並行 (Side-by-Side)
Time of Update: 2017-01-18
複製代碼 代碼如下:#include <stdio.h>int binSearch(int arr[], int low, int high, int key);int binSearch2(int arr[], int low, int high, int key);int binSearch3(int arr[],int start,int ends,int key);int main() { int arr[]={3,8,11,15,17,2
Time of Update: 2017-01-18
複製代碼 代碼如下:#include <stdio.h>#include <stdlib.h>typedef struct Node { int data; struct Node *next;} Node;void getInfo(Node * node);int printNodes(Node *node);void saveToFile(Node * node, char * filename)