目錄
- 常量
- 變數
- 變數的作用域
- 變數的記憶體分析
常量
- 定義:描述一些固定的資料,不能改變的資料
- 常量的分類:
- 整型常量
- 二進制
- 八進制
- 十六進制
- 實型常量
- 單精度float
- 雙精度double
- 字符型常量
- char
- 字串常量
- 用雙引號引起來的就是字串常量
- 整型常量
#include <stdio.h> int main() { // 整型常量 10; // 實型常量(小數) // 單精度float/雙精度 // 注意默認情況下都是雙精度的實型常量也就是所有小數都是默認double 10.1; // 雙精度double 88.8; // 雙精度double 5.2f; // 單精度float // 字符型常量,用單引號擴起來的就是字符型常量 // 注意:字符型常量只能寫一個字符,寫多個會報錯除了\r,\n,\t,\f,\\,\',\'',\ddd 'a'; // 字符型常量 'ab'; // 錯誤 '1'; ‘12’; ‘1’; // 這個是么? // 字串型常量,用雙引號引起來的就是字串常量 // 注意:無論你用雙引號l括起來幾個字符,只要是使用雙引號擴起來就是字串常量 "abc"; "a" return 0; }
變數
-
什么是變數
-
表示的資料可以經常被修改,當一個資料的值不確定,或者經常被修改的時候就應該用變數來表示
-
比如說:游戲積分,頁碼
-
-
如何定義變數
-
申請一塊存盤空間,也就是定義一個變數
-
定義變數的格式,資料型別,變數名稱
-
定義一個基本資料型別的變數(int,float,double,char)
-
int number; // 定義一個n名稱叫做number的變數,會在記憶體空間中開辟一塊給number,用于存盤資料 int value; // 再開辟一塊空間給value

-
連續定義變數
int number1,number2; // 連續開辟兩個存盤空間分別給number1,number2
-
如何往變數對應的存盤空間中存盤資料呢?
注意:變數中不能隨便的存盤資料,只能存盤與之對應的資料,也就是說之前申請記憶體空間為int型別,那就只能存盤int型別,如果存盤float,double會出一些問題
int number; number = 2; // 這時候會把資料2這個值放在申請好了的number的存盤空間中
-
變數的第一次賦值稱之為初始化
- 要想使用變數都必須先對變數進行初始化,然后才能使用
- 如果不對變數進行初始化,那么其實變數存盤的就是一些垃圾資料
-
如何使用變數
-
要使用占位符
-
int number = 10; printf("%i",number);
-
-
變數初始化的兩種方式
// 初始化的兩種方式 // 1,先定義再初始化賦值 int value1; value1 = 10; // 2,定義的同時初始化 int value2 = 10;
-
完全初始化
// 完全初始化 int value3, value4; value3 = value4 = 10; // 把10賦值給value4,再把value4的值賦值給value3 int value3,value4; value4 = 10; value3 = value4;
-
部分初始化
// 部分初始化 int value5,value6 = 10; // 開辟兩個存盤空間value5,value6,將10的值賦值給value6,但是value5并沒有給賦值
-
如何修改變數的值
int number = 10; // 定義并初始化一個變數number,將10的值賦值給number number = 20; // 將20的值賦值給變數number,此時number的記憶體空間沒有是10,只有20了,它只能存一個值
-
變數之間的值傳遞
int number = 10; // 定義并初始化一個變數number,將10的值賦值給number int number1 = number; // 將number的值賦值給number1,此時會先去找number這個變數的記憶體地址,找到記憶體地址取出存的值,將這個值賦值給number1
-
連續賦值
int a,b,c; // 定義并初始化三個變數a,b,c a = b = c = 10; // 將10的值賦值給c,再將c的值賦值給b,再將b的值賦值給a
-
如何查看變數的值(簡單用法)
// int型別 int number = 10; printf("number的值是%i",number) //使用%i // float型別 float FloatNumber = 20.0f; // float型別要加上f標示,默認是double型別的 printf("FloatNumber的值是%f",FloatNumber) // 使用%f // double型別 double DoubleNumber = 30.01234567890; printf("DoubleNumber的值是%lf",DoubleNumber) //使用lf,longfloat printf("DoubleNumber的值是%.10lf",DoubleNumber) // printf函式默認強制輸出小數點后6位,想要輸出雙精度的需要指定你要輸出小數點后面幾位 // char型別 char CharNumber = 'a'; printf("CharNumber的值是%c",CharNumber) // 使用%c
變數的作用域
-
c語言中所有變數都有自己的作用域,根據作用域的不同分為區域變數和全域變數,
int main(){ a = 10; int a ; // 變數的作用域是從定義的哪一行開始,到大括號結束,報錯 return 0; // return 代表函式的結束,只要執行到這里就代表這個函式結束了 }
-
例如:把變數放在rerurn后面執行--報錯
int main(){ int number; number = 10; return 0 ; printf("%i",number); // 此時number在return的后面,number的作用域也就消失了 }
-
例如:不同函式之間的變數作用域是不一樣的,不能相互呼叫的
int call(){ int number; return 0; } int main(){ number = 10; printf("%i",number); // 此時在main函式中呼叫call函式中的變數number,會報錯,number在call函式中,他的作用域之存在于call的函式記憶體空間中, return 0; }
-
例如:在同一函式中,函式的嵌套時,內層函式可以使用外層函式的變數,外層函式不能使用內層函式的變數
int main(){ int number; { number = 10; printf("%i",number);// 此時可以正常列印,外層中number時遇到她所在的記憶體空間,他和{printf("%i",number)}是同一級別的 } return 0; }
int main(){ { int number; number = 10; } printf("%i",number); // 此時是錯誤的,number的變數存盤在{}中,并不在main()函式中 return 0; }
-
例如:變數查找的順序(第一種)
- 如果自己的作用域中有就使用自己的
- 不同的作用域中可以定義相同的變數名稱
- 統一范圍內不能出現同名的變數
int main(){ int number; { int number = 20; printf("%i",number); // 20,變數名稱相同,先查找本記憶體空間的變數number也就是20 } printf("%i",number); // 0,因為在此記憶體空間中有number的變數,但是并沒有初始化所以是0,也可能是其他的數字,隨機的 return 0; }
-
變數的記憶體分析
-
記憶體和位元組的關系
- 每塊記憶體都是連續的
- 每塊記憶體的大小都是一樣的
- 合理的分配記憶體會節省很多空間

-
一個變數所占用的記憶體空間,不僅跟變數的型別有關系,還跟編譯環境有關系
-
同一個變數型別在不同的編譯環境下所占用的存盤空間是不一樣的-這就是我們要定義變數型別的原因(優化存盤空間)
-
記憶體由大到小尋址
// 記憶體空間分析 int main(){ // 記憶體尋址從大到小,按照這種規則那么先定義的變數記憶體地址肯定比后定義的要大 int number = 0; int value = https://www.cnblogs.com/zcyd/archive/2020/11/18/0; printf("number的記憶體地址是%p\n",&number); // 使用%p占位符,&符號就可以獲取變數的記憶體地址,列印出來的是16進制 //a, b, c, d, e, f //10, 11, 12, 13, 14, 15 printf("value的記憶體地址是%p\n",&value); return 0; }
-
變數存盤單元的第一個位元組地址就是該變數的地址
-
任何變數在存盤空間都是二進制存在的
-
| 型別 | 16位編譯器 | 32位編譯器 | 64位編譯器 |
| char | 1 | 1 | 1 |
| int | 2 | 4 | 4 |
| float | 4 | 4 | 4 |
| double | 8 | 8 | 8 |
| short | 2 | 2 | 2 |
| long | 4 | 4 | 8 |
| long long | 8 | 8 | 8 |
| void * | 2 | 4 | 8 |

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/224439.html
標籤:其他
上一篇:感謝您的支持
下一篇:Java自學推薦書籍
