1. c語言中無符號數與有符號數
unsigned int a = 6;int b = -20
;printf(
"a+b = %d\n
",a+b); #輸出-14
printf(
"a+b %s \n
",(a+b)>0 ? "
> 0
":"< 0
"); #輸出a+b > 0
有符號數和無符號數在進行比較運算時(==,>=,<=,>,<),有符號數隱式的轉換成無符號數。上述中,a+b的值為-14(1111_1111_1111_0010),但是a+b 比較時,隱式轉換成無符號數,因此輸出為》0
記住一點:-1為有符號整型資料,常量數值在整形範圍內,均為int型別,如果為正數或0,則作為無符號int,否則為有符號int。比較運算子兩邊的資料型別會在編譯器的幫助下,自動統一的。
再記住一點:c語言規定是從取值範圍小的往大的提公升,char—>unsigned char—>short—>unsigned short—>int--->unsinged int—>long—>unsigned long –>long long ---> unsigned long long
2. 函式不能反悔棧記憶體的指標,可以返回堆記憶體的指標。對於空指標,連續兩次free,不會出錯。對於非空指標,連續兩次free,會出錯。
int *a1;a1 = (int*)malloc(10
); a1[
0]=10
; printf(
"a1:%p a1[0]:%d \n
",a1,a1[0]); //
輸出a1:0x85c9008 a1[0]:10
free(a1);
//free(a1);
//加上這句會報錯
printf("
a1:%p a1[0]:%d \n
",a1,a1[0]); //
輸出a1:0x85c9008 a1[0]:0
根據輸出可以得知,free後,a1的指向的位址值沒有改變,但是這塊位址所代表的空間已經是無效空間了,不能使用。為了防止這種情況,free後的,應該設定a1= null; 這樣,防止後面的**對a1的空間誤操作。
3. 引用與指標有什麼區別?
引用必須初始化,指標不需要。
引用初始化之後不能被改變,指標可以改變所指的物件。
不存在指向空值的引用,但是存在指向空值的指標
technorati 標籤:
c語言 基礎
C語言基礎知識
1 的問題。int i 1 int j 2 int k i j printf d k 輸出k為3。編譯原理有關編譯器在詞法解析的時候,對於運算子,總是查詢最大的匹配也就是說,i j,編譯器在找到 的時候,它不立即理解為 而是繼續下乙個字元,下乙個字元仍然是 可以組成 再往下的話便是 不成立了。所以i...
C語言基礎知識
一 位元組對齊 位元組對齊的原因,是機器在訪問記憶體中儲存的資料的高效性。通常機器是機器位數為自然邊界來訪問記憶體的,如果乙個4位元組整形數,所在的記憶體不在虛擬記憶體的自然邊界。則cpu需要讀多於一次的資料,這樣就降低了效率。所以,簡單地說,就是保證cpu指令在訪問資料的時候,能一次讀取,而不需要...
C語言基礎知識
1.進製 1 基數 基數為n,代表n進製 2 位權 從個位開始,向左依次編號為0,1.x 分別代表n進 制的x次 3 八進位制以0開頭,十六進製制以0x開頭 4 x 進製轉 進製 按權求和 十進位制轉 x進製 連除倒取餘 2.基本資料型別 3.常量 程式執行期間值不能被改變的量 分為 整型常量,浮點...