#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; }
什麼是變量函數
表示的數據能夠常常被修改,當一個數據的值不肯定,或者常常被修改的時候就應該用變量來表示優化
好比說:遊戲積分,頁碼spa
如何定義變量code
申請一塊存儲空間,也就是定義一個變量blog
定義變量的格式,數據類型,變量名稱遊戲
定義一個基本數據類型的變量(int,float,double,char)內存
int number; // 定義一個n名稱叫作number的變量,會在內存空間中開闢一塊給number,用於存儲數據 int value; // 再開闢一塊空間給value
![image-20200506235143526](/Users/mac/Library/Application Support/typora-user-images/image-20200506235143526.png)作用域
連續定義變量字符串
int number1,number2; // 連續開闢兩個存儲空間分別給number1,number2
如何往變量對應的存儲空間中存儲數據呢?get
注意:變量中不能隨便的存儲數據,只能存儲與之對應的數據,也就是說以前申請內存空間爲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 = 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 |