天天看點

C語言資料類型與指針入門C程式簡介C語言資料類型C語言指針類型指針的應用

C程式簡介

#include <stdio.h>

/**
 * <> 尋找系統的資源
 * "" 尋找我們自己的資源
 * .h .hpp 為頭檔案
 * .c .cpp 為實作檔案
 */
int main() {

    printf("Hello Wold");

    return 0;
}
           
  • #include <stdio.h>

    表示要引入一個庫,

    stdio.h

    是C語言的一個标準庫。
  • 為注釋,編譯時會被編譯器忽略。
  • int main()

    是主函數,程式從這裡開始執行。
  • printf()

    stdio.h

    提供的一個函數,會列印相應的消息。
  • return 0;

    終止 main() 函數,并傳回值 0。
C語言資料類型與指針入門C程式簡介C語言資料類型C語言指針類型指針的應用

運作結果.png

C語言資料類型

類型 位元組 值範圍
char 1位元組 -128 ~ 127或 0 ~ 255
unsigned char 1位元組 0 ~ 255
signed char 1位元組 -128 ~ 127
int 2 或 4 位元組 -32,768 ~ 32,767 或 -2147483648 ~ 2147483647
unsigned int 2 或 4 位元組 0 ~ 65,535 或 0 ~ 4294967295
short 2 位元組 -32768 ~ 32767
unsigned short 2 位元組 0 ~ 65535
long 4 位元組 -2147483648 ~ 2147483647
unsigned long 4 位元組 0 ~ 4294967295
float 4 位元組 1.2E-38 ~ 3.4E+38
double 8 位元組 2.3E-308 ~ 1.7E+308

以64位機器為例,下圖為各個類型所占位元組數:

C語言資料類型與指針入門C程式簡介C語言資料類型C語言指針類型指針的應用

C語言資料類型所占位元組數-64位機器.png

C語言指針類型

在C語言中,每個變量都會有一個記憶體位址,而指針就是用來儲存記憶體位址,即指針 = 記憶體位址
#include <stdio.h>

int main() {

    int int_value = 100;
    int *p = &int_value;

    printf("int_value的記憶體位址:%p\n", &int_value);
    printf("*p指向的記憶體位址:%p\n", p);
    printf("*p指向的記憶體位址所對應的值:%d", *p);

    return 0;
}
           
  • int int_value = 100

    ,這裡我們定義了一個 int類型的變量,并為其指派為 100,其中

    int_value

    為變量名稱,你也可以用其他變量名稱,隻要符合規範即可。
  • int *p = &int_value

    這裡我們定義了一個 int類型的指針變量,并将

    int_value

    這個變量的記憶體位址指派給

    *p

    *

    是用來指定一個變量為指針類型。

    &

    為取位址符,即擷取一個變量的記憶體位址。

    下圖是上面代碼被編譯執行時的結果

    C語言資料類型與指針入門C程式簡介C語言資料類型C語言指針類型指針的應用
    image.png

當然,除了int類型的指針,也可以定義其他類型的指針,在C語言中萬物皆指針,如下:

#include <stdio.h>

int main() {
    
    /** int 類型的指針 */
    int *ip;
    
    /** double 類型的指針 */
    double *dp;
    
    /** float 類型的指針 */
    float  *fp;
    
    /** char 類型的指針 */
    char  *cp;
    
    return 0;
}
           

指針的應用

#include <stdio.h>

void swapValue(int *value1, int *value2) {
    int tmp = *value1;
    *value1 = *value2;
    *value2 = tmp;
}

int main() {

    int value1 = 100;
    int value2 = 200;
    printf("--------- before swapValue ---------\n");
    printf("value1 = %d\n",value1);
    printf("value2 = %d\n",value2);
    printf("--------- after swapValue ---------\n");
    swapValue(&value1, &value2);
    printf("value1 = %d\n",value1);
    printf("value2 = %d\n",value2);

    return 0;
}
           
  • 首先,我們定義了另外一個函數:

    void swapValue(int *value1, int *value2)

    ,這個函數接收兩個int類型的指針。
  • *value1 = *value2

    表示 将

    *value2

    指向記憶體位址所對應的值取出并指派給

    *value1

    所指向的記憶體位址。
  • 然後調用

    swapValue

    函數來實作值的互換,

    swapValue

    函數接收兩個指針類型,而指針 = 記憶體位址,是以我們分别取出

    value1

    value2

    的記憶體位址傳遞進去,來實作值的互換。

    下圖為程式的運作結果:

    C語言資料類型與指針入門C程式簡介C語言資料類型C語言指針類型指針的應用
    運作結果.png

系統:Windows 10 64位

IDE:CLion