位置:首頁 > 高級語言 > C語言教學 > C語言指針

C語言指針

C語言指針是很容易學習和。某些C語言編程任務的指針進行更容易和其它任務,如動態存儲器分配,不能離開使用指針來執行。所以有必要學習指針成為一個完善的C程序員。讓我們開始學習指針的簡單和容易的步驟。

每一個變量是一個內存地址位置,每個存儲單元都有其定義的地址,可以用符號(&)運算符,它表示一個內存地址進行訪問。考慮下麵的例子,這將打印中定義的變量的地址。

#include <stdio.h>

int main ()
{
   int  var1;
   char var2[10];

   printf("Address of var1 variable: %x
", &var1  );
   printf("Address of var2 variable: %x
", &var2  );

   return 0;
}

當上述代碼被編譯和執行時,它會產生一些輸出如下:

Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

所以,明白了什麼是內存地址以及如何訪問它,所以這個概念的基礎上。現在,讓我們來看看什麼是指針。

什麼是指針?

指針是一個變量,其值是另一個變量的地址,所述存儲器位置,即,直接地址。像任何變量或常量,必須聲明指針之前,你可以用它來存儲任何變量的地址。一個指針變量聲明的一般形式是:

type *var-name;

在這裡,指針類型為基本類型;它必須是一個有效的C語言數據類型,var-name是指針變量的名稱。 星號*用來聲明指針。然而,在語句中的星號被用來指定一個變量作為一個指針。以下是有效的指針聲明:

int    *ip;    /* yiibaier to an integer */
double *dp;    /* yiibaier to a double */
float  *fp;    /* yiibaier to a float */
char   *ch     /* yiibaier to a character */

所有的指針的值的實際數據的類型可以是整數,浮點數,字符,或以其他方式,代表存儲器地址的長十六進製數。不同數據類型的指針之間的唯一區彆是變量的數據類型或常數的指針指向。

如何使用指針?

有一些重要的操作,使用指針的幫助。 (a)定義一個指針變量(b)分配一個變量的指針(c)地址終於在指針變量的可用地址來訪問的值。這是通過使用一元運算符*返回位於其操作數所指定的地址的變量的值完成。下麵的例子利用這些操作:

#include <stdio.h>

int main ()
{
   int  var = 20;   /* actual variable declaration */
   int  *ip;        /* yiibaier variable declaration */

   ip = &var;  /* store address of var in yiibaier variable*/

   printf("Address of var variable: %x
", &var  );

   /* address stored in yiibaier variable */
   printf("Address stored in ip variable: %x
", ip );

   /* access the value using the yiibaier */
   printf("Value of *ip variable: %d
", *ip );

   return 0;
}

當上述代碼被編譯和執行時,它會產生一些輸出如下:

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

C語言 NULL指針

它始終是一個很好的做法,以一個NULL值賦給如果冇有確切的地址將被分配一個指針變量。這樣做是在變量聲明時分配NULL指針被稱為空指針。

NULL指針是一個常數為零在幾個標準庫中定義的值。考慮下麵的程序:

#include <stdio.h>

int main ()
{
   int  *ptr = NULL;

   printf("The value of ptr is : %x
", ptr  );
 
   return 0;
}

當上述代碼被編譯和執行時,它產生了以下結果:

The value of ptr is 0

在大多數操作係統中,程序不允許在地址0來訪問存儲器,因為該存儲器是由操作係統保留。然而,存儲器地址0具有特彆重要的意義;它表明,該指針不指向一個訪問的存儲器位置。但按照慣例,如果一個指針包含空(null/零)值,則假定為不指向什麼。

要檢查一個空指針,可以使用if語句如下:

if(ptr)     /* succeeds if p is not null */
if(!ptr)    /* succeeds if p is null */

C語言指針詳述:

指針有很多概念,它們對C語言編程非常重要。有以下幾個重要指針概念,一個C程序員應該明確:

概念 描述
C語言指針運算 有跡象表明,可以對指針使用四則運算符:++, --, +, -
C語言指針數組 可以定義數組持有一些指針
C語言指針的指針 C語言允許指針的指針
C語言傳遞函數指針 通過引用或地址傳遞參數均使傳遞的參數將在調用函數被調用函數變化
C語言從函數返回指針 C語言允許函數返回一個指向局部變量,靜態變量和動態分配的存儲器