char類型的變量在內存中是如何存儲的呢?
int num;
char charValue;
printf("num 的內存地址%p\n",&num); // 0x7ffeefbff42c
printf("charValue的內存地址%p\n",&charValue); // 0x7ffeefbff42b
// 通過打印的內存地址可以發現,定義的兩個變量在內存中的地址只差一個字節
- char 存儲的是單個字符,那么c內存中是識別 0 和 1,數字通過二進制存儲,那么 char 類型呢?
- 在存儲 char 類型時,系統會去查詢 ASCII 碼表的值,再進行存儲,取值的時候也是一樣
// 通過一張 ASCII 碼表,將字符與數字對應起來
// 另外:在 C語言中不看怎么存儲數據只看怎么取這個數據
char charValue = 'a';
printf("通過使用百分號 i 來取 charvalue 的值:%i\n",charValue); // 97

char value = 6;//這個存儲的就是數字 00000110
char charValue = '6'; // 需要查詢 ASCII 碼表中對應的數字是:70 // 00110110
printf("數字:%i\n",value); // 6
printf("字符:%i\n",charValue); // 54
- Char類型在某些情況下可以當做整型來用
- 如果對內存要求特別嚴格,而且需要存儲的整數不超過 char 類型的取值范圍,那么就可以使用char 類型來代替 int類型
- char 的取值范圍是:char 類型占一個字節,也就是 8 位,那么取值范圍就是-2* 7->2 *7-1 === 128-127
練習
char Upper(char value);
char Upper1(char value);
main(){
// 練習
// 要求用戶輸入一個字母,如果用戶輸入的是大寫那么就轉換為小寫
printf("請您輸入一個字母,以回車結束\n");
char charValue;
scanf("%c",&charValue);
// char result = Upper(charValue);
char result = Upper1(charValue);
printf("轉換后的值:%c\n",result);
return 0;
}
// 此方法沒有判斷用戶輸入的是否是大寫的字母
char Upper(char value){
char charValue = value + 32;
return charValue;
}
char Upper1(char value){
if (value >= 'A' && value <='Z'){
// value = value + 32; // 如果條件滿足則返回大寫
// 此處 value 是 char 類型,與int 類型相加,小類型和大類型運算時先隱式轉換為大類型就算結果
// 然后得出的結果 97 再轉化為 char 類型
value = value + ('a'-'A'); // 動態計算大寫 A 和小寫 a 的差值
}
return value; // 如果條件不滿足則原路返回
}