C語言-常量/變量

 

常量

  • 定義:描述一些固定的數據,不能改變的數據
  • 常量的分類:
    • 整型常量
      • 二進制
      • 八進制
      • 十六進制
    • 實型常量
      • 單精度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;
}

 


變量

  • 什麼是變量函數

    • 表示的數據能夠常常被修改,當一個數據的值不肯定,或者常常被修改的時候就應該用變量來表示優化

    • 好比說:遊戲積分,頁碼spa

  • 如何定義變量code

    1. 申請一塊存儲空間,也就是定義一個變量blog

    2. 定義變量的格式,數據類型,變量名稱遊戲

    3. 定義一個基本數據類型的變量(int,float,double,char)內存

    4. int number; // 定義一個n名稱叫作number的變量,會在內存空間中開闢一塊給number,用於存儲數據
      int value; // 再開闢一塊空間給value

      ![image-20200506235143526](/Users/mac/Library/Application Support/typora-user-images/image-20200506235143526.png)作用域

    5. 連續定義變量字符串

      int number1,number2; // 連續開闢兩個存儲空間分別給number1,number2
    6. 如何往變量對應的存儲空間中存儲數據呢?get

      注意:變量中不能隨便的存儲數據,只能存儲與之對應的數據,也就是說以前申請內存空間爲int類型,那就只能存儲int類型,若是存儲float,double會出一些問題

      int number;
      number = 2; // 這時候會把數據2這個值放在申請好了的number的存儲空間中
    7. 變量的第一次賦值稱之爲初始化

      • 要想使用變量都必須先對變量進行初始化,而後才能使用
      • 若是不對變量進行初始化,那麼其實變量存儲的就是一些垃圾數據
    8. 如何使用變量

      • 要使用佔位符

      • int number = 10;
        printf("%i",number);
    9. 變量初始化的兩種方式

           // 初始化的兩種方式
          // 1,先定義再初始化賦值
          int value1;
          value1 = 10;
          
          // 2,定義的同時初始化
          int value2 = 10;
    10. 徹底初始化

          // 徹底初始化
          int value3, value4;
          value3 = value4 = 10; // 把10賦值給value4,再把value4的值賦值給value3
      
          int value3,value4;
          value4 = 10;
          value3 = value4;
    11. 部分初始化

          // 部分初始化
          int value5,value6 = 10; // 開闢兩個存儲空間value5,value6,將10的值賦值給value6,可是value5並無給賦值
    12. 如何修改變量的值

      int number = 10; // 定義並初始化一個變量number,將10的值賦值給number
      number = 20; // 將20的值賦值給變量number,此時number的內存空間沒有是10,只有20了。它只能存一個值
    13. 變量之間的值傳遞

      int number = 10; // 定義並初始化一個變量number,將10的值賦值給number
      int number1 = number; // 將number的值賦值給number1,此時會先去找number這個變量的內存地址,找到內存地址取出存的值,將這個值賦值給number1
    14. 連續賦值

      int a,b,c; // 定義並初始化三個變量a,b,c
      a = b = c = 10; // 將10的值賦值給c,再將c的值賦值給b,再將b的值賦值給a 
    15. 如何查看變量的值(簡單用法)

      // 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

 

相關文章
相關標籤/搜索