C語言指標


C語言中的指標是變數,也稱為定位符或指示符,指向值的地址。

注意:指標是C語言的靈魂,如果指標不能熟練使用,那意味著你的C語言學得不咋地。

指標的優點

  1. 指標減少程式碼並提高效能,用於檢索字串,樹等,並與陣列,結構和函式一起使用。
  2. 可以使用指標從函式返回多個值。
  3. 它使您能夠存取計算機記憶體中的任何位置。

指標的使用

C語言中有很多指標的使用。

  • 動態記憶體分配
    在C語言中,可以指標使用malloc()calloc()函式動態分配記憶體。

  • 陣列,函式和結構
    C語言中的指標被廣泛應用於陣列,函式和結構中。它減少程式碼並提高效能。

指標中使用的符號

符號 名稱 說明
& 地址運算子 確定變數的地址。
* 間接運算子 存取地址上的值

地址運算子

地址運算子'&'返回變數的地址。 但是,我們需要使用%u來顯示變數的地址。建立一個原始碼檔案:address-of-operator.c,其程式碼實現如下 -

#include <stdio.h>      

void main() {
    int number = 50;
    printf("value of number is %d, address of number is %u", number, &number);
}

執行上面範例程式碼,得到以下結果 -

value of number is 50, address of number is 15727016

指標範例

下面給出了使用列印地址和值的指標的例子。如下圖所示 -

如上圖所示,指標變數儲存數位變數的地址,即fff4。數位變數的值為50,但是指標變數p的地址是aaa3

通過*(間接運算子)符號,可以列印指標變數p的值。

我們來看一下如上圖所示的指標範例。

建立一個原始碼檔案:pointer-example.c,其程式碼實現如下 -

#include <stdio.h>      

void main() {
    int number = 50;
    int *p;

    p = &number;//stores the address of number variable  

    printf("Address of number variable is %x \n", &number);
    printf("Address of p variable is %x \n", p);
    printf("Value of p variable is %d \n", *p);

}

執行上面範例程式碼,得到以下結果 -

Address of number variable is b3fa4c
Address of p variable is b3fa4c
Value of p variable is 50

NULL指標

未分配任何值的指標稱為NULL指標。 如果在宣告時沒有在指標中指定任何地址,則可以指定NULL值,這將是一個更好的方法。

int *p=NULL;

在大多數庫中,指標的值為0(零)。

指標的應用範例:

指標程式來交換2個數位而不使用第3個變數

建立一個原始碼檔案:swap2numbers.c,其程式碼實現如下 -

#include<stdio.h>  

void main() {
    int a = 10, b = 20, *p1 = &a, *p2 = &b;

    printf("Before swap: *p1=%d *p2=%d\n", *p1, *p2);
    *p1 = *p1 + *p2;
    *p2 = *p1 - *p2;
    *p1 = *p1 - *p2;
    printf("\nAfter swap: *p1=%d *p2=%d\n", *p1, *p2);

}

執行上面範例程式碼,得到以下結果 -

Before swap: *p1=10 *p2=20

After swap: *p1=20 *p2=10