84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
#define SIZE 100; const int size = 100;
他们有什么区别
char b[4] ; char (*pb)[4] = &b;//正常
b 是一个指针常量 ,也可以说是一个整形常量,可不可以理解是第二种情况,可以取地址,但不能赋值
b在内存中,有没有自己的空间
认证0级讲师
define巨集是在預處理階段展開,const是在編譯運行時
define不帶型別也不做安全檢查,const帶型,在編譯階段會執行安全檢查
define佔用程式碼空間;const是變數定義,佔用資料段空間,效率更高
define 巨集定義只是在編譯器的預處理(Preprocessing)階段進行單純的文字替換,也就是正式開始編譯時,你程式碼裡SIZE都會被替換成100。編譯報錯或執行時如果出了問題,你只能知道是100出了問題,SIZE對你來說是不可見的,這樣不利於Debug。而使用常數就不會有這樣的問題。
你下面的程式碼,看著雖然彆扭,但是沒問題。 b是堆疊上分配的變量,自然佔用了記憶體空間。
@鬍鬚老頭似乎沒有分配調試資訊:堆疊上沒有分配空間,沒給b分配空間,賦值使用lea堆疊開闢16個位元組,陣列佔8個,pa佔4個,還有4個未使用
C語言學得不是很好,錯了煩請指正^_^
b是一個4B的數組;pb是一個數組指針,指向b的內存空間,所以可以通過讀取pb的內容得到b的地址,但是pb+1就指到了b的末尾位元組之後了。
b
4B
pb
pb+1
define巨集是在預處理階段展開,const是在編譯運行時
define不帶型別也不做安全檢查,const帶型,在編譯階段會執行安全檢查
define佔用程式碼空間;const是變數定義,佔用資料段空間,效率更高
define 巨集定義只是在編譯器的預處理(Preprocessing)階段進行單純的文字替換,也就是正式開始編譯時,你程式碼裡SIZE都會被替換成100。編譯報錯或執行時如果出了問題,你只能知道是100出了問題,SIZE對你來說是不可見的,這樣不利於Debug。而使用常數就不會有這樣的問題。
你下面的程式碼,看著雖然彆扭,但是沒問題。 b是堆疊上分配的變量,自然佔用了記憶體空間。
@鬍鬚老頭似乎沒有分配
調試資訊:
堆疊上沒有分配空間,沒給b分配空間,賦值使用lea
堆疊開闢16個位元組,陣列佔8個,pa佔4個,還有4個未使用
C語言學得不是很好,錯了煩請指正^_^
b
是一個4B
的數組;pb
是一個數組指針,指向b
的內存空間,所以可以通過讀取pb
的內容得到b
的地址,但是pb+1
就指到了b
的末尾位元組之後了。