Time of Update: 2018-12-05
memcpy void * memcpy ( void * destination, const void * source, size_t num ); 二進位拷貝 strcpy char * strcpy ( char * destination, const char * source ); 不能用於string,可用於char *和char [] strcat char * strcat ( char * destination, const char *
Time of Update: 2018-12-05
在C語言中,有時候指標和數組等效,有的時候卻不然。 什麼時候不同?1. 數組名本身就代表一個地址。指標代表地址的地址。所以,指標、數組的定義和可能有的多處的聲明要嚴格匹配!不能將在一個地方定義的數組,在他處聲明為指標。反過來也不行!(詳見C專家p84)的 2. 指標和數組都可以在他們的定義中用字串常量進行初始化。儘管看上去一樣,但底層的實現機制卻不同。定義指標時,編譯器不為指標所指向的對象分配空間,它只是分配指標本身的空間。除非在定義的同時賦給指標一個字串常量進行初始化。例如:char *p
Time of Update: 2018-12-05
int atoi ( const char * str ) //Convert string to integer忽略str前方的空白,直到遇到第一個非空白字元,如果第一個非空白字元是加號或減號或者數字,則轉換儘可能長的有效字元為數字。如果沒有合法的轉換返回0,如果轉換後的值超過int表示範圍,INT_MAX or INT_MIN is returned。 long int atol ( const char * str ) //Convert string to
Time of Update: 2018-12-05
Effective C++
Time of Update: 2018-12-05
條款7:為多態基類聲明virtual解構函式 C++明白指出,當derived class對象經由一個base class指標被刪除,而該base class帶著一個non-virtual解構函式,其結果未有定義。事實上,derived對象被局部銷毀,只有其base class部分記憶體被正確釋放。造成資源泄漏,敗壞資料結構。 任何class只要帶有virtual函數,都幾乎確定應該也有一個virtual解構函式。 如果class不含virtual函數,通常表示它不意圖被用作一個base
Time of Update: 2018-12-05
1 #include <stdio.h> 2 3 int array[] = {23, 24 ,12, 204}; 4 #define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0])) 5 6 void main() 7 { 8 int d = -1; 9 if(d <= TOTAL_ELEMENTS)10 printf("TRUE\n");11 } 運行結果是不列印TRUE。 解釋:TOTAL_ELEMENT所定義的
Time of Update: 2018-12-05
程式的輸出方式有兩種:一種是及時輸出,另一種是先緩衝起來,然後大塊輸出。前者往往給系統造成很大的負擔,影響程式效能。後者的實現,C語言通過函數 void setbuf ( FILE * stream, char * buffer );實現。此函數的功能是通知輸入輸出函數庫中的函數,所有寫入到stream的輸出都應該使用buffer作為輸出緩衝區,直到buffer緩衝區被填滿,或者程式員顯式調用int fflush ( FILE * stream
Time of Update: 2018-12-05
先看一個代碼void myfun(int i, int ii){ cout << i << " " << ii << endl;}void main(){ int b = 3; int arr[] = {6,7,8,9,10}; int *ptr = arr; *(ptr++) += 123; printf("%d\t%d\n", *ptr, *++ptr); int i = 10;
Time of Update: 2018-12-05
文章目錄 ParametersReturn ValueParametersReturn ValueParametersReturn ValueParameters 記憶體配置mallocfunction<cstdlib>void * malloc ( size_t size );Allocate memory blockAllocates a block of size bytes of memory, returning a
Time of Update: 2018-12-05
1. sizeof() 和strlen()sizeof() and strlen() Code highlighting produced by Actipro CodeHighlighter
Time of Update: 2018-12-05
1、編譯預先處理: 編譯器讀取C來源程式,對其中的預先處理命令(以#開頭)和特殊符號進行處理。預先處理命令包括主要包括三種,一是宏定義命令,二是條件編譯指令,三是標頭檔包含指令。採用標頭檔的目的是使某些定義可以供多個不同的C來源程式使用。在需要用到這些定義的C來源程式中,只需加上#include語句即可,而不必重新定義一遍。先行編譯程式將標頭檔中的代碼統統加入到源檔案,進而產生輸出檔案。 除了以上三種預先處理命令,還有特殊符號。先行編譯程式可以識別一些特殊符號。例如在來源程式中出現的LINE
Time of Update: 2018-12-05
數組的定義 數組的維數必須用大於等於1的常量運算式定義。此常量運算式只能包含整形字面值常量、枚舉常量、或者用常量運算式初始化的整形const對象。 非const變數、以及到運行階段才知道其值的const變數都不能用於定義數組的維數。const int size = get_size();int a_size = 26;int table[size]; //errorint array[a_size]; //error//因為size雖然是const int常量,但是編
Time of Update: 2018-12-05
關於引用 定義一個引用的時候必須要進行初始化,否則編譯錯誤。 當引用初始化以後,只要改引用存在,它就綁定到初始化時指向的對象。不可能將引用綁定到另一個對象。 非const引用只能綁定到與該引用同類型的對象。const引用可以綁定到不同但相互關聯類型的對象,還可以綁定到右值。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1//
Time of Update: 2018-12-05
負數的右移位操作負數的>>操作,結果取決於語言的實現,左邊空出的位置,可能填補0,也可能填補1。 靜態局部對象 內建類型的局部對象如果沒顯式初始化,則值就未初始化。靜態局部對象、全域對象,包括內建類型和使用者自訂類型,如果未提供初始化式,則編譯器自動初始化為0。 拷貝建構函式 A(A copy){…};是不允許的,如果允許,會造成無限的遞迴調用。正確的形參為const A&
Time of Update: 2018-12-05
條款20:寧以pass-by-reference-to-const 替換 pass-by-value 一般而言,pass-by-value 需要耗費調用拷貝建構函式和解構函式的代價。當傳回值以value返回時也同樣。 以by reference 方式傳遞參數還可以避免slicing(對象切割問題)。當一個derived class 對象以by value方式傳遞給一個函數類型為base class的形參,base class 建構函式會被調用,則造成derived對象被切割為base對象。
Time of Update: 2018-12-05
1. int sprintf( char *buffer, const char *format [, argument] ... ); <stdio.h>例如: int ss; char temp[64]; string str; ss = 1000; sprintf(temp, "%d", ss); string s(temp); //調用string的方法
Time of Update: 2018-12-05
聯合(union)在C/C++裡面見得並不多,但是在一些對記憶體要求特別嚴格的地方,聯合又是頻繁出現,那麼究竟什麼是聯合、怎麼去用、有什麼需要注意的地方呢?就這些問題,我試著做一些簡單的回答,裡面肯定還有不當的地方,歡迎指出! 1、什麼是聯合? “聯合”是一種特殊的類,也是一種構造類型的資料結構。 在一個“聯合”內可以定義多種不同的資料類型, 一個被說明為該“聯合”類型的變數中,允許裝入該“聯合”所定義的任何一種資料,這些資料共用同一段記憶體,已達到節省空間的目的(還有一個節省空間的類型:
Time of Update: 2018-12-05
C++中的容器 標準序列容器:vector、string、deque、list 標準關聯容器:set、multiset、map、multimap 迭代器的分類 根據迭代器所支援的操作,可以把迭代器分為5類。 1、輸入迭代器:是唯讀迭代器,在每個被遍曆的位置上只能讀取一次。 2、輸出迭代器:是唯寫迭代器,在每個被遍曆的位置上只能被寫一次。 3、前向迭代器:兼具輸入和輸出迭代器的能力,但是它可以對同一個位置重複進行讀和寫。但它不支援operator--,所以只能向前移動。 4、雙向迭代
Time of Update: 2018-12-05
顯示轉換也成為強制類型轉換(cast),包括以下列名字命名的強制類型轉換操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。 1. const_cast const_cast<TYPE> (object); The const_cast keyword can be used to remove the const or volatile property from an object. The target
Time of Update: 2018-12-05
C++中單參數建構函式若不聲明為explict,在合適的場合可以產生隱式轉換:由成員變數類型轉換為類類型。 下面的代碼展示如何?反向的轉換: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 void changeFontSize(FontHandle f, int newsize); 2 class Font{ 3 public: 4