C語言中的空指標



C語言中的空指標

C語言中的空指標是一種不與任何資料型別關聯的指標型別。空指標可以儲存任何型別的地址,並且可以強制轉換為任何型別。它們也被稱為通用指標或泛型指標。

在C程式設計中,函式malloc()calloc()返回"void *"或通用指標。

宣告空指標

這是宣告空指標的語法:

void *ptr;

空指標示例

以下示例顯示瞭如何在C程式中使用空指標:

#include <stdio.h>

int main(){

   int a = 10;
   char b = 'x';

   // void pointer holds address of int a
   void *ptr = &a;
   printf("Address of 'a': %d", &a);
   printf("\nVoid pointer points to: %d", ptr);

   // it now points to char b
   ptr = &b;
   printf("\nAddress of 'b': %d", &b);
   printf("\nVoid pointer points to: %d", ptr);
}

輸出

執行程式碼並檢查其輸出:

Address of 'a': 853377452
Void pointer points to: 853377452
Address of 'b': 853377451
Void pointer points to: 853377451

空指標陣列

我們可以宣告一個陣列空指標,並存儲指向不同資料型別的指標。

空指標是一個可以在C語言中儲存任何資料型別記憶體地址的指標。因此,空指標陣列是一個可以儲存記憶體地址的陣列,但這些地址可以指向不同資料型別的變數。

您還可以將指標儲存到任何使用者定義的資料型別(例如陣列和結構體)中。

示例

在這個示例程式中,我們聲明瞭一個空指標陣列,並在其中儲存了指向不同型別變數(int、float和char*)的指標。

#include <stdio.h>

int main(){

   void *arr[3];

   int a = 100;
   float b = 20.5;
   char *c = "Hello";

   arr[0] = &a;
   arr[1] = &b;
   arr[2] = &c;

   printf("Integer: %d\n", *((int *)arr[0]));
   printf("Float: %f\n", *((float *)arr[1]));
   printf("String: %s\n", *((char **)arr[2]));

   return 0;
}

輸出

執行此程式碼後,將產生以下輸出:

Integer: 100
Float: 20.500000
String: Hello

空指標的應用

下面列出了一些空指標的常見應用:

  • malloc()函式作為庫函式在標頭檔案stdlib.h中可用。它在程式執行時動態分配一塊記憶體。正常的變數宣告會導致記憶體分配在編譯時進行。

     
    void *malloc(size_t size);
    
  • 空指標用於實現泛型函式。動態分配函式malloc()calloc()返回"void *"型別,此特性允許這些函式用於分配任何資料型別的記憶體。

  • 空指標最常見的應用是在實現資料結構(如連結串列佇列)即動態資料結構中。

空指標的侷限性

空指標具有以下侷限性:

廣告