逍遙自在學C語言 | 指標的基礎用法

2023-06-16 18:01:01

前言

在C語言中,指標是一項重要的概念,它允許我們直接存取和操作記憶體地址。

可以說,指標是C語言一大優勢。用得好,你寫程式如同趙子龍百萬軍中取上將首級;用得不好,則各種問題層出不窮,有種雙拳難敵四手的感覺。

本文將介紹指標的基礎知識,包括指標的定義、初始化、存取和運算。

一、人物簡介

  • 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。

  • 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。

二、指標的基本概念

指標是一種變數,它儲存的是記憶體地址而不是實際的值。

通過指標,我們可以直接存取和操作記憶體中儲存的資料。下面是指標的基本概念:

int* ptr;  // 宣告一個指向整數的指標

在上面的範例中,我們宣告了一個名為ptr的指標變數,它可以指向整數型別的資料。

指標變數的型別必須與其指向的資料型別相匹配。

三、宣告和初始化指標

要宣告指標變數,我們需要使用*符號來指示該變數是一個指標。下面是指標的宣告和初始化範例:

int* ptr;    // 宣告一個指向整數的指標
int num = 10;  // 宣告一個整數變數

ptr = #  // 將指標指向num變數的地址

在上面的範例中,我們宣告了一個指向整數的指標ptr,然後將其初始化為變數num的地址,使用&運運算元可以獲取變數的地址。

四、存取指標和間接參照

通過指標,我們可以存取和修改其指向的變數。使用指標存取變數的值稱為間接參照或解除參照操作。

下面是存取指標和解除參照的範例:

int* ptr;
int num = 10;

ptr = #

printf("變數num的值:%d\n", *ptr);  // 輸出:變數num的值:10

*ptr = 20;  // 修改變數num的值

printf("變數num的新值:%d\n", num);  // 輸出:變數num的新值:20

在上面的範例中,我們使用*ptr來存取指標所指向的變數num的值,並可以對其進行修改。

五、指標的運算

指標支援一些特定的運算,使得我們能夠在記憶體中進行定位和遍歷。

以下是指標的常見運算:

  • 指標的自增和自減運算:使用自增和自減運運算元可以將指標移動到下一個或上一個記憶體位置。
int* ptr;
int nums[] = {1, 2, 3, 4, 5};

ptr = nums;  // 指標指向陣列的第一個元素

printf("第一個元素的值:%d\n", *ptr);  // 輸出:第一個元素的值:1

ptr++;  // 指標自增,移動到下一個元素

printf("第二個元素的值:%d\n", *ptr);  // 輸出:第二個元素的值:2
  • 指標之間的相減運算:可以對兩個指標進行相減運算,得到它們之間的距離(以元素個數為單位)。
int* ptr1;
int* ptr2;
int nums[] = {1, 2, 3, 4, 5};

ptr1 = nums;       // 指標1指向陣列的第一個元素
ptr2 = &nums[3];   // 指標2指向陣列的第四個元素

int distance = ptr2 - ptr1;

printf("兩個指標之間的距離:%d\n", distance);  // 輸出:兩個指標之間的距離:3

通過以上範例,我們可以看到指標的自增、自減和相減運算的應用,它們在遍歷陣列和計算距離等場景中非常有用。

六、範例程式碼

下面是完整的範例程式碼,用於加深對指標的理解,鞏固前面所學的知識:

#include <stdio.h>

int main() {
    int num = 10;
    int* ptr = &num;

    printf("變數num的值:%d\n", *ptr);
    *ptr = 20;
    printf("變數num的新值:%d\n", num);

    int nums[] = {1, 2, 3, 4, 5};
    int* p = nums;
    printf("第一個元素的值:%d\n", *p);
    p++;
    printf("第二個元素的值:%d\n", *p);

    int* p1 = nums;
    int* p2 = &nums[3];
    int dist = p2 - p1;
    printf("兩個指標之間的距離:%d\n", dist);

    return 0;
}

小結

通過這篇文章,我們學會了

1、指標的基本概念

2、指標的基本用法