首頁  >  問答  >  主體

c++ - 程序中常量的定义

#define SIZE 100;
const int size = 100;

他们有什么区别

    char b[4] ;
    char (*pb)[4] = &b;//正常

b 是一个指针常量 ,也可以说是一个整形常量,可不可以理解是第二种情况,可以取地址,但不能赋值

b在内存中,有没有自己的空间

PHP中文网PHP中文网2713 天前503

全部回覆(4)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 13:56:08

    1. define巨集是在預處理階段展開,const是在編譯運行時

    2. define不帶型別也不做安全檢查,const帶型,在編譯階段會執行安全檢查

    3. define佔用程式碼空間;const是變數定義,佔用資料段空間,效率更高

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:56:08

    define 巨集定義只是在編譯器的預處理(Preprocessing)階段進行單純的文字替換,也就是正式開始編譯時,你程式碼裡SIZE都會被替換成100。編譯報錯或執行時如果出了問題,你只能知道是100出了問題,SIZE對你來說是不可見的,這樣不利於Debug。而使用常數就不會有這樣的問題。

    你下面的程式碼,看著雖然彆扭,但是沒問題。 b是堆疊上分配的變量,自然佔用了記憶體空間。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:56:08

    @鬍鬚老頭似乎沒有分配

    調試資訊:

    堆疊上沒有分配空間,沒給b分配空間,賦值使用lea
    堆疊開闢16個位元組,陣列佔8個,pa佔4個,還有4個未使用

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 13:56:08

    C語言學得不是很好,錯了煩請指正^_^

    char b[4] ;
    char (*pb)[4] = &b;//正常

    b是一個4B的數組;
    pb是一個數組指針,指向b的內存空間,所以可以通過讀取pb的內容得到b的地址,但是pb+1就指到了b的末尾位元組之後了。

    回覆
    0
  • 取消回覆