關於c和c++一直有好多的程式猿在研究,研究區別研究相似的地方,究竟用那個預言好,沒有確定的說法,要看你做什麼了。
初始化操作:
在初始化的時候,我們都知道c語言一般都是這樣處理的:
int a=12;
c++ 呢,除了這樣複製初始化之外還可以直接初始化:
int a(12);
啊???那c呢?試了一下不成功,為什麼呢?哦,原來c語言沒有建構函式,另外c++的這種 int a=12;,其實c++的初始化和賦值是不一樣的操作。
這裡不過用的是賦值函式和建構函式。、
分配記憶體:
在c語言中我們可以這樣嗎?
char *name=(char*)malloc(sizeof(char)*16) //error
int main()
沒錯,你可能期望c的值是3,a是2,b是3,可是告訴你不幸的訊息,之前的call_max可能會讓你失望的,因為他巨集展開其實就相當於:
int c =((a)>(++b)?(a):(++b));這個時候你應該明白了,原來在a和++b比較的時候,就已經發現a小於++b,然後執行後邊的++b,這個時候b的值是4了。
#
#也是預處理?是的,你可以這麼認為。那怎麼用它呢? 別急,先看下面例子:
#define sqr(x) printf("the square of x is %d.\n", ((x)*(x)));
如果這樣使用巨集:
sqr(8);
則輸出為:
the square of x is 64.
注意到沒有,引號中的字元x 被當作普通文本來處理,而不是被當作乙個可以被替換的語言符號。
假如你確實希望在字串中包含巨集引數,那我們就可以使用「#」,它可以把語言符號轉化為字串。上面的例子改一改:
#define sqr(x) printf("the square of "#x" is %d.\n", ((x)*(x)));
再使用:
sqr(8);
則輸出的是:
the square of 8 is 64.
很簡單吧?相信你現在已經明白#號的使用方法了。
##
和#運算子一樣,##運算子可以用於巨集函式的替換部分。這個運算子把兩個語言符號組合成單個語言符號。看例子:
#define xname(n) x ## n
如果這樣使用巨集:
xname(8)
則會被展開成這樣:
x8隨後有更新。。。
雜 C語言的一些好玩的操作
在實際使用時,我們經常會用到很多較為麻煩的資料轉換,這裡就提供了較為簡單的資料的處理。技能名稱 技能熟練度 技能教程鏈結 c語言了解 暫無資料型別 熟悉暫無 嵌入式軟體中,對於資料結構的轉換,大家一般都是使用各種奇怪的指標轉換,但是c語言的union就可以很簡單的實現這個方式,這個方式是帶有一定的資...
C和C 的一些語法區別
struct 在c語言中,試用定義的struct型別的變數方式 struct 定義的變數 生成的變數 在c 語言中,試用定義的struct型別的變數方式 struct 定義的變數 生成的變數 或者 定義的變數 生成的變數 在c語言中struct定義的變數中不能有函式,而在c 中可以有函式。函式的引數...
c和c 關於const的一些區別
以下參考了網上的一些資料並通過程式驗證。注意,以下情況都是用gcc和g 編譯器得到的結果,用vs編譯器又會有所不同。以下說下c和c 中const定義的常量的一些區別 c 中用const定義了乙個常量後,不會分配乙個空間給它,而是將其寫入符號表 symbol table 這使得它成為乙個編譯期間的常量...