C 和c 的一些雜想,想到哪兒寫到哪兒

2021-06-17 20:21:17 字數 1358 閱讀 9404

關於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 這使得它成為乙個編譯期間的常量...