C/C++
-
有數組定義int a1[2][2]={{1,2},{2}};則a1[1][1]的值爲不確定的
錯的:這是一種初始化方法,第二排數據都初始化爲2; -
關於宏定義中的# 和##
#字符串化, 例如:#define LogMessage(a) printf("The message is: %s", #a); LogMessage(WARNING) //The message is:WARNING string ppp="abcdef"; LogMessage(ppp) //The message is: ppp; not "abcdef"
##符號連接操作 例如:
#define Sum_Number(b) Num##b #define Num9 999 Sum_Number(9) //999
#@ 字符化,例如:
#define TEST(tp,charactor) \ { \ char a[100]{0};\ sprintf_s("%s,%c", #tp, #@charactor); \ TRACE(a); \ } TEST(WARNING, C); //輸出,WARNING, C
#include <stdio.h> #define XNAME (n) x ## n #define PRINT_XN (n) printf("x" #n " = %d\n", x ## n); “#n” 表示把n變成字符串 ##n表示將兩個語言符號合成一個 int main(void) { int XNAME(1) = 14; //變爲 int xi = 14; int XNAME(2) = 20; //變爲 int x2= 20; PRINT_XN(1); //變爲printf("x1 = %d\n", x1); PRINT_XN(2); //變爲printf("x2 = %d\n", x2); return 0; } x1 = 14 x2 = 20
-
關於賦值運算符:a=(b=4)+(c=6) 是一個合法的賦值表達式
operator = 返回本對象的引用;所以c++中完全沒問題;在c中同樣ok,先執行括號中的賦值運算,再進行加法運算;a = 10; -
關於struct中數據地址對齊的問題,當前變量的地址偏移量必須是當前變量所佔字節的整數倍;
加上#pragma pack(4)後:
變量存放的起始地址的偏移量有兩種情況:第一、如果n大於等於該變量所佔用的字節數,那麼偏移量必須滿足默認的對齊方式,第二、如果n小於該變量的類型所佔用的字節數,那麼偏移量爲n的倍數,不用滿足默認的對齊方式。結構的總大小也有個約束條件,分下面兩種情況:如果n大於所有成員變量類型所佔用的字節數,那麼結構的總大小必須爲佔用空間最大的變量佔用的空間數的倍數,否則必須爲n的倍數;
詳情看這篇文章: 關於地址對齊的詳解
舉例:#pragma pack(4)//設定爲4字節對齊 struct test { char m1; double m4; int m3; };
有#pragma: 1 + 3 + 8 + 4 = 16
無: (1 + 7 + 8 + 4)== 20 不是8的整數倍:20+4 = 24
#pragma pack(16) : 1 + (7) + 8 + 4 =20 不是整數倍 20 + 4 = 24; -
二叉樹的深度是從1開始,根節點爲1
高度從1開始,最低葉子結點爲1
層數從1開始,根節點爲1; -
滿二叉樹與完全二叉樹:
左邊滿二叉樹:全都是滿的 右邊完全二叉樹:最下層右側可以有空缺;
-
排序算法的時間空間複雜度