知識點回憶:總結

C/C++

  1. 有數組定義int a1[2][2]={{1,2},{2}};則a1[1][1]的值爲不確定的
    錯的:這是一種初始化方法,第二排數據都初始化爲2;

  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
    
  3. 關於賦值運算符:a=(b=4)+(c=6) 是一個合法的賦值表達式
    operator = 返回本對象的引用;所以c++中完全沒問題;在c中同樣ok,先執行括號中的賦值運算,再進行加法運算;a = 10;

  4. 關於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;

  5. 二叉樹的深度是從1開始,根節點爲1
    高度從1開始,最低葉子結點爲1
    層數從1開始,根節點爲1;

  6. 滿二叉樹與完全二叉樹:
    左邊滿二叉樹:全都是滿的 右邊完全二叉樹:最下層右側可以有空缺;
    在這裏插入圖片描述在這裏插入圖片描述

  7. 排序算法的時間空間複雜度
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章