C語言數據類型和變量

在 C 語言程序中將數據分爲兩種:字面量(常量)和變量。數組

(一) 字面量

字面量(也有叫「常量」的)指的是數值固定的量,「一看就能看出來」。在程序中,常量只能被引用,不能被修
改。ide

在 C 程序中經常使用的字面量有如下幾種:
第 1 種 整型(整數類型)。例如:100、31四、0、-200 等。
示例代碼函數

#include <stdio.h>
int main()
{
    printf("%d\n",200);
    printf("%d\n",-100);
    getchar();
    return 0;
}

程序分析:學習

  1. 在執行 printf 函數時,整數常量將取代雙引號中的%d
  2. ‘\n’是換行符,即輸出「200」後,控制檯中的光標位置移到下一行的開頭,下一個輸出的內容-100 會出如今該光標位置上。注意\n 的方向,

第 2 種 浮點型。其實就是小數。3d

示例代碼:調試

#include <stdio.h>
int main()
{
    printf("%f\n",3.14);
    printf("%f\n",-12.2);
    getchar();
    return 0;
}

默認狀況下,輸出浮點型保留小數點後 6 位數字。因此 3.14 會輸出 3.140000,-12.2 輸出-12.20000。blog

第 3 種 字符型。在程序中,使用英文單引號括起來的字符被稱爲字符型。例如:’a’、’1’、’=’、’?’、’#’等都是合法的字符。內存

【注意】
字符類型只能是單個字符,不能寫成’ab’、’12’、’=?’。作用域

示例代碼:字符串

#include <stdio.h>
int main()
{
    printf("%c\n",'A');
    printf("%c\n",'#');
    getchar();
    return 0;
}

第 4 種 字符串。在程序中,使用英文雙引號將若干個字符括起來的都是字符串(注意不包括雙引號自己)。例如:」124「、」hello」、」hello world」等。
【注意】
字符串只能使用雙引號包裹,不能寫成’124’、’hello’、’hello world’。
示例代碼:

#include <stdio.h>
int main()
{
    printf("123\n");
    printf("hello world");
    getchar();
    return 0;
}
(二) 變量

在 C 語言中,一個合法的變量由 3 部分組成:變量類型、變量名、變量值。變量類型:變量的類型是用來規定變量對應內存空間的大小和能盛放的東西。 變量名:變量名是用來標記變量對應的內存空間。就比如,有 10 個如出一轍的杯子,從外表看根本沒法區分。可是,若是給每一個杯子都作一個標記,好比依次貼上標籤:「1 號」、「2號」……「10 號」,這樣就不會混淆了。同理,變量名也是一樣的做用,經過變量名就能夠精準的找到變量對應的內存空間。變量值:變量值是變量名標記內存空間中的數據。就比如,杯子中裝的可樂、咖啡等。

(三) 標識符與關鍵字

1. 標識符

在 C 語言中,用來對變量,函數,數組等命名的字符序列被稱爲標識符。好比:變量名a、函數名 printf 等都是標識符。C 語言對標識符有如下規定:

  1. 只能由 26 個英文字母、數字或下劃線 3 種字符組成。
  2. 第 1 個字符只能是字母或下劃線。
  3. 大小寫敏感的。
  4. 不能所有是關鍵字。

【注意】C 語言是嚴格區分大小寫的,好比:max,Max,MAx,MAX 就是 4 個不相同
的標識符。

2. 關鍵字

C 語言中具備特殊用途的單詞被稱爲關鍵字。當定義標識符時,不要讓標識符與關鍵字相同,不然編譯沒法經過。C 語言共有以下的關鍵字:break、case、char、const、for、if、void、int、long 等。

(四) 基本數據類型

定義變量並賦初值的基本語法:變量類型 變量名=變量值;
好比:int a=3; 定義一個整數類型變量 a,a 的值是 3

1. 整數類型

int 能夠定義整數類型(簡稱整型)。int 類型數據在 printf 函數中通常採用%d 格式進行輸出,%d 表示「十進制整數」形式。

#include<stdio.h>
int main()
{
    int a=200;
    printf("%d\n",a);
    getchar();
    return 0;
}

解釋一下:int a=200;
printf("%d\n",a);的意思是:把 a 的值帶入參數的這個位置。和 printf("%d\n",200);效果同樣
注意,不要寫成 printf("%d\n","a");什麼都不加,才表明變量。

2. 浮點數類型

浮點型有如下幾種:

  1. 單精度浮點型(float)。
  2. 雙精度浮點型(double)。

float、double 的區別在於表示範圍和精度不同。須要注意的就是給 float 賦值字面量的時候須要以 f 結尾,不然會有警告。

#include<stdio.h>
int main()
{
    float f=3.14f;
    double d=3.14;
    printf("%f\n",f);
    printf("%lf\n",d);
    getchar();
    return 0;
}

輸出 double 要用%lf,雖然用%f 也行,可是建議用%lf。
VS2012 中執行的是 C89 標準,變量必須在全部其餘代碼以前。

3. 字符型

char 類型數據在 printf 函數中通常採用%c 格式進行輸出。

#include<stdio.h>
int main()
{
    char c='A';
    printf("%c\n",c);
    getchar();
    return 0;
}

4. 轉義字符

在 C 語言中,有一類特殊字符,該類字符是以字符\開頭的字符序列。例’\n’,它表明一個「換行」符。這類字符沒法用通常形式表示,只能採用這種特殊的形式表示,這類字符被稱爲轉義字符。

  1. ‘\n’ 表明回車換行。

    #include<stdio.h>
    int main()
    {
        printf("hello world\n");
        printf("hello\nworld);
        getchar();
        return 0;
    }
               
    /* 輸出結果
    hello world
    hello
    world
    */
  2. \」 表明雙引號字符(「)。

    因爲在 C 語言中,雙引號已經被用於表示字符串的開始與結束標誌,也就是說,雙引號通常都是成對出現的。例如:」ABC」,’#?*’,」123」……等等。可是,若是在字符串中顯示雙引號,該如何表示呢?有些讀者很天然的想到了下面的寫法:
    「hello」world」 //錯誤寫法
    這是一種錯誤寫法,前面已經講過雙引號(「)有特殊意義:當編譯器讀取到第一個雙引號時認爲是字符串的開始,讀取到第二個雙引號時認爲是字符串的結束,而後把兩個雙引號之間的內容當作字符串解析。
    因爲編譯器會把前兩個雙引號之間的內容當作字符串解析,把第三個單引號當作字符串開始標誌對待,而後編譯器會再去尋找下一個雙引號當作字符串的結束標誌,若是找不到就報錯。
    爲了解決這種問題,在 C 語言中使用\對雙引號進行轉義例如:\」,此時雙引號就是普通字符,再也不具備特殊的意義。

    #include<stdio.h>
    int main()
    {
        printf("hello \"world");
        getchar();
        return 0;
    }
  3. \

    單斜線(\)也是字符,該如何顯示呢?使用\對反斜線\進行轉義例如:\\。

    #include<stdio.h>
    int main()
    {
        printf("%c\n",'\\');
        printf("hello\\world");
        getchar();
        return 0;
    }

5. 字符與字符串的關係

在 C 語言中是沒有字符串類型的,所謂的字符串本質上是由單個的字符構成,例如:」rupeng.com」,注意使用雙銀行包裹起來。」helloworld」能夠看做由字符’h’、’e’、’l’、’l’、‘o’、’w’、’o’、’r’、’l’、’d’組成(其實結尾還有一個'\0',初學者先不用理解這一點)。
在 printf 中用%s 輸出字符串。
字符串是被拆分爲單個字符進行存儲,輸出時也按照存儲的順序連續輸出。作個形象的比喻:若是把字符串當作一串糖葫蘆,字符就是每個山楂:

6. printf 與數據類型

佔位符 類型 說明
%d 或者%i int 以十進制輸出,%i 是老用法
%f float 還能夠指定精度,%.2f 就是保留 2 位小數。
%lf double
%c char 也能夠用%d 輸出 char,輸出的就是字符的 ASCII 碼
%s 字符串

printf 中數據類型必定不能用錯,float 類型必須用%f,整數必須用%d,若是用錯了會發現結果很怪異。好比下面的錯誤代碼:
printf("%f",3);
printf("%d",3.14f);
原理層面,這涉及到數據在內存中表示格式的問題
還有,在 printf 中也能夠同時使用多個佔位符,只要和參數的類型、個數可以對的上就
行:
printf("name=%s,age=%d,height=%f","djb",18,3.14f);

(五) 註釋

C 語言中容許使用(雙斜線)//註釋一行代碼,使用/* */註釋多行代碼,被註釋的代碼會被編譯器忽略。
註釋的做用主要有 2 點:

  1. 方便本身和他人理解這段代碼。
  2. 暫時屏蔽不想參與編譯的代碼。

1. 單行註釋

只能註釋一行。在程序中,行註釋以//開始,本行後面的內容都會被編譯器忽略。

#include<stdio.h>
int main()
{
    printf("My name is oldwang!"); //oldwang
     //printf("oldwang\n");
    getchar();
    return 0;
}

2. 塊註釋

塊註釋又被稱爲多行註釋,/*表示註釋開始,*/表示註釋結束,/*與*/以前的內容將被編譯器忽略。
#include<stdio.h>
int main()
{
    printf("hello world");
    /*
    printf("hello world");
    printf("hello world");
    printf("hello world");
    */
    getchar();
    return 0;
}
注意/**/不能嵌套。
(六) 變量

1. 定義變量

在 C 語言中,變量只有被定義,才能使用,定義變量有兩種形式:
第 1 種:先定義,後賦值,語法以下:
變量類型 變量名;
變量名 = 數據;
例如:
int a; //先定義 int 型變量 a
a =200; //而後將 200 賦值給變量 a
第 2 種 定義並賦值,語法以下:
變量類型 變量名=數據;
例如:
int a=200; //定義 int 變量 a 並賦值爲 200

2. 引用變量

變量就是一個數據的「名字」,能夠在代碼中經過引用變量使用變量。分爲 2 種狀況:

  1. 給變量進行賦值。
  2. 讀取變量中保存的數據。

若是變量出如今=號左邊,就是給變量進行賦值,例如:a =100;
若是變量出如今=號右邊,或單獨出現就是讀取變量中的保存的數據。例如:
a=100;
b=200;
a=b;
printf(「%d\n」,a);
上述第 3 行,變量 a 在=號左邊,變量 b 在=號右邊。所以,a=b 執行過程爲:先讀取變
量 b 中保存的數據 200,而後賦值給變量 a,此時變量 a 的值是 200。
第 4 行,在 printf 函數中變量 a 是單獨出現的,表示讀取變量 a 中保存的數據。

3. 定義多個變量

C 語言中,定義多個變量有 2 種形式:
第 1 種: 在一行語句中,定義多個變量,語法結構:
變量類型 變量名 1,變量名 2,變量名 3,……; //變量之間以逗號分割
第 2 種:多行語句,定義多個變量,語句結構:
變量類型 變量名 1;
變量類型 變量名 2;
……
下面經過例子來了解在程序中如何定義多個變量。
定義多個變量。

#include<stdio.h>
int main()
{
    int a=100,b=200; //一行定義 int 變量 a、b 且賦值
    int c=300; //定義變量 c 且賦值
    int d=400; //定義變量 d 且賦值
    printf("a=%d\n",a);
    printf("b=%d\n",b);
    printf("c=%d\n",c);
    printf("d=%d\n",d);
    getchar();
    return 0;
}


#include<stdio.h>
int main()
{
    int a,b;
    a=3;
    b=4;
    getchar();
    return 0;
}

4. 語句與語句塊

在 C 語言中,程序執行的最小單位爲語句,一條合法的語句必須在末尾有一個分號。
C 語言中經常使用的語句有 5 種:

  1. 賦值語句
  2. 函數調用語句
  3. 空語句
  4. 複合語句(語句塊)
  5. 控制語句

1. 賦值語句

賦值語句是 C 語言中最基本的語句,須要使用到賦值符號=,該符號的做用是將一個數據賦值給一個變量,例如:
a = 100; //將 100 賦值給變量 a

【注意】賦值語句中,賦值號=的左邊必須是變量,不能是常量。

2. 函數調用語句

函數調用語句是 c 程序中,比較經常使用的語句,由函數調用與分號構成,例如:
printf(「hello world」);

3.空語句

該語句只有一個分號,例如:
;
空語句常常做爲循環語句的循環體,表示什麼也不作。

4. 複合語句(語句塊)

複合語句又被稱爲語句塊,在程序中,使用{ }將多行語句括起來就能夠成爲複合語句,
例如:
{
int a=3;
printf("a=%d\n",a);
}
左花括號{表示複合語句開始,右花括號}表示複合語句結束。複合語句不會影響程序的正常執行,經常和控制語句一塊兒使用。
語句塊能夠嵌套。
通常建議語句塊中的代碼進一步縮進,VS 也是默認這樣控制的。

5. 順序結構

順序結構是 C 程序中最簡單的程序結構。順序結構的程序從第一行語句開始,按照代碼排列的順序,從上到下依次逐句執行,上一條語句執行結束下一條語句才能執行,直到最後一條語句結束。

#include<stdio.h>
int main()
{
    int a=10;
    printf("a=%d\n",a);
    a=20;
    printf("a=%d\n",a);
    a=30;
    printf("a=%d\n",a);
    getchar();
    return 0;
}

解釋:
int a=10;//聲明變量 a,而且給 a 賦值爲 10
a=20;//給 a 賦值爲 20

6. 變量須要注意的問題

1.變量必須定義才能使用

#include<stdio.h>
int main()
{
    a=200; //出錯代碼
    printf("%d\n",a); //出錯代碼
    getchar();
    return 0;
}

2. 全部變量要聲明在方法的最開始

#include<stdio.h>
int main()
{
    printf("hello");	//出錯代碼
    int a=200;
    printf("%d\n",a);
    getchar();
    return 0;
}

VS2012 用的是 C89 標準,變量的定義必須在方法或者語句塊的最開始,變量聲明以前不能寫其餘代碼。到了 VS2017 就沒這個問題。

3. 變量重名問題

C 語言規定,同一做用域內變量定義不能重名。因爲還沒有學習函數,讀者能夠暫時理解爲,同一個{ }中的變量名不能相同。

#include<stdio.h>
int main()
{
    int a=100;
    char a='A'; //出錯代碼
    printf("%d\n",a);
    printf("%c\n",a); //出錯代碼
    getchar();
    return 0;
}
(七) 局部變量

C 語言中,變量定義的位置能夠分爲 3 種:

  1. 在函數內定義。
  2. 在函數內的語句塊中定義。
  3. 在函數外部定義。

在函數內部定義的變量被稱爲局部變量,在函數外部定義的變量被稱爲全局變量。前面編寫的 C 程序中只包含一個 main 函數,而且變量也都定義在 main 函數中,所以前面中定義的變量都是局部變量。

1. 局部變量的做用域

變量的做用域指的是變量的有效做用範圍,而局部變量的做用域僅限於函數內部以及語句塊中。
局部變量的做用域須要分 2 種狀況來討論:

(1)在函數內部定義的變量只在本函數範圍內有效,也就是說只有本函數內才能引用,本函數以外都不能引用這些變量。
(2)在函數內部語句塊中定義的變量,只在本語句塊範圍內有效,也就是說只有在該語句塊內才能引用,該語句塊以外都不能引用這些變量。

#include<stdio.h>
int main()
{
    { //語句塊開始
    	int a=200;
    } //語句塊結束
    printf("a=%d\n",a); //出錯代碼
    getchar();
    return 0;
}

在 C 語言中,局部變量的做用域以花括號進行區分

#include<stdio.h>
int main()
{
    int a=100;
    {
        int b=200;
        printf("a=%d\n",a);
        printf("b=%d\n",b);
    }
    printf("a=%d\n",a);
    getchar();
    return 0;
}

語句塊中能夠定義變量,也必須定義在其餘語句以前

#include<stdio.h>
int main()
{
    int a=100;
    printf("hello");
    {
        int b=200;
        printf("a=%d,b=%d\n",a,b);
    }
    printf("a=%d\n",a);
    getchar();
    return 0;
}

2. 局部變量使用前,必須初始化

在 C 語言中,第一次對變量進行的賦值操做被稱爲初始化。變量的初始化分爲兩種狀況:
第一種 定義變量而且初始化,例如:
int a = 10; //定義而且初始化
第二種 先定義,後初始化,例如:
int a;
a=10;
變量初始化本質上就是賦值,不過只有第一次給變量賦值才能被稱爲初始化。而變量賦值就沒有次數限制了,第幾回均可以。
在 C 語言中,若是定義了局部變量,可是並未進行初始化,編譯器並不會自動初始化局部變量,該局部變量的值將是未知的。所以,在程序中使用這樣的變量是存在風險的。爲了防止這種狀況發生,在 VS2012 中,若是程序中使用了沒有初始化的局部變量,調試程序的時候將報錯(若是在運行模式下會輸出不肯定的值),下面經過例子來了解一下。

#include<stdio.h>
int main()
{
    int a;
    printf("a=%d\n",a); //出錯代碼,使用了未初始化的局部變量
    getchar();
    return 0;
}

相關文章
相關標籤/搜索