C語言階段——需要注意的小細節
持續更新。。。。。。。
1. int a;
定義全域性變數 如果不給初值 系統自動給a賦0
但定義區域性變數時 如果不給初值 就是一個隨機值
2.scanf()函式 裡 別放多餘的東西 就放一個標準輸入格式符就好
試一試:
scanf("%f\n", &temp1);
scanf("%lf\n", &temp2);
就知道了
3.逗號表示式作為一個整體,從左到右逐個計算;它的值為最後一個表示式的值;
逗號表示式的優先順序在所有運算子中最低。
4.賦值表示式 = *= -= /= 運算順序是從右往左運算
例如 int temp = 2; if( x= 2 * temp = 3 ) …… 首先算2 * temp 得常數 4, 4 = 3 語法錯誤 x仍然沒有賦值
優先順序:! 算術符 關係符 && || 賦值 逗號
5. 假設a 的初值為2 運算完 a 的值為多少? a 為 2 原因: 第一個if 沒有加 {} 沒有標明作用域
6. Ubuntu啟動出錯 啟動不了 可以試一下 刪除下面兩個資料夾
至於為什麼 我不知道。。 大家也可以評論告訴我。。。
7. C語言中 0 == '\0' == NULL != '0' == 48
8. '\n' sizeof('\n') 的結果為4 ==> 為什麼? '\n' 字元型佔用一個位元組沒錯
但是'\n'的值是整型的ASCAII值 10 所以 sizeof(10) 結果為 4
sizeof() 雖然長得像函式 但其實 是運算子
typeof( '1' ) 同理 他代表的型別並不是char 而是 int 原因就是函式
處理的時候把 '1' 轉換成整型數字 49 處理了
9.前置++ 後置++
10.等價的表示式
11.資料在記憶體中的儲存形式 整型 : 資料的補碼儲存 浮點型: 資料的補碼儲存
字元型: 按字元的ASCII碼儲存 有疑問看第8點
有符號:按資料的補碼儲存
無符號型:按資料的原始碼儲存
有符號資料的表示 最小值在記憶體中的儲存 符號位為 1 其他位為0
最大值在記憶體中的儲存 符號位為 0 其他位為1
12. "\\\065a,\n"
字串長度為? 5
分析下:"\\\065a,\n"第一個字元\\,第一個\表示轉義,
第二個\代表該字元第二個字元\065,八進位制表達(有點湊巧啊)
第三個字元a
第四個字元,
第五個字元\n
所以答案是5
13.
%s列印字串 後接地址 %c列印字元 接值
char ch[] = "123456"; //系統給常量ch指向的變數陣列 分配記憶體空間存 字串"123456"
char *str = "abcdef"; //系統給變數str 分配記憶體空間存 常量字串"123456"的地址
注意:變數的值可以變 但是常量的值不可改變
也就是說 變數陣列 的值"123456"可以變
變數str的值(存放的地址)可以變成另外的地址
但是常量指標ch的指向不可更改 常量字串"abcdef"不可更改
14.
15.
16.
17.
18.
19.
20.