C語言學習系列(五)變量和常量


一、常量

定義:在程序運行中,其值不能改變的量稱為常量

分類:常量可以是任何的基本數據類型,比如整數常量、浮點常量、字符常量,或字符串字面值,也有枚舉常量。

在 C 中,有兩種簡單的定義常量的方式:

使用 #define 預處理器。

使用 const 關鍵字。

#include <stdio.h>
#define WIDTH 20
#define    HEIGHT 30
int main(){
    printf("value of width:%d\n",WIDTH);
    printf("value of heigth:%d\n",HEIGHT);
    
    //可以使用 const 前綴聲明指定類型的常量
    const int length =40;
    printf("value of length:%d\n",length);

}

define 和 const 的區別:

  1.  const 定義常量是有數據類型的,而 #define 宏定義常量卻沒有,一是 const 有類型;二是 const 可以有不同的作用域。
  2.  const 常量有數據類型,而宏常量沒有數據類型。編譯器可以對 const 進行類型安全檢查,而對后者只進行字符替換,沒有類型安全檢查,不分配存儲單元,並且在字符替換中可能會產生意料不到的錯誤。
  3.  有些集成化的調試工具可以對 const 常量進行調試,但是不能對宏常量進行調試。

二、變量

變量代表一個有名字的、具有特定屬性的一個存儲單元。它用來存放數據,也就是存放變量的值。變量在程序運行中是可變的。

變量必須先定義,后使用。

變量定義:變量定義就是告訴編譯器在何處創建變量的存儲,以及如何創建變量的存儲。變量定義指定一個數據類型,並包含了該類型的一個或多個變量的列表。

  1. 帶初始化的定義:在聲明的時候指定一個值。初始化有一個等號,后跟一個常量表達式組成。
  2. 不帶初始化的定義:帶有靜態存儲持續時間的變量會被隱式的初始化為 NULL  (所有字節的值都是0),其他所有變量的初始值是未定義的。

變量聲明:變量聲明向編譯器保證變量以指定的類型和名稱存在,這樣編譯器在不需要知道變量完整細節的情況下也能繼續進一步的編譯。變量聲明只在編譯時有它的意義,在程序連接時編譯器需要實際的變量聲明。

  1. 一種是需要建立存儲空間的。例如:int a 在聲明的時候就已經建立了存儲空間。
  2. 另一種是不需要建立存儲空間的,通過使用extern關鍵字聲明變量名而不定義它。 例如:extern int a 其中變量 a 可以在別的文件中定義的。
  3. 除非有extern關鍵字,否則都是變量的定義。
#include <stdio.h>
 
// 變量聲明
extern int a, b;
extern int c;
extern float f;
 
int main ()
{
  /* 變量定義 */
  int a, b;
  int c;
  float f;
 
  /* 初始化 */
  a = 10;
  b = 20;
  
  c = a + b;
  printf("value of c : %d \n", c);
 
  f = 70.0/3.0;
  printf("value of f : %f \n", f);
 
  return 0;
}

三、C中的左值(Lvalues)和右值(Rvalues)

C中有兩種類型的表達式:

  1. 左值(lvalue):指向內存位置的表達式被稱為左值(lvalue)表達式。左值可以出現在賦值號的左邊或右邊。
  2. 右值(rvalue):術語右值(rvalue)指的是存儲在內存中某些地址的數值。右值是不能對其進行賦值的表達式,也就是說,右值可以出現在賦值號的右邊,但不能出現在賦值號的左邊。

變量是左值,因此可以出現在賦值號的左邊。數值型的字面值是右值,因此不能被賦值,不能出現在賦值號的左邊。


 

        if ( U.read(me.Blog) ) $("#推薦").click();
        if ( U.copy(me.Blog) ) $("#u Blog").console("原文鏈接:http://www.cnblogs.com/Grand-Jon/p/7449700.html ");
        else me.Fuck(U);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM