程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 數組指針、指針數組、函數指針、指針函數,數組指針函數

數組指針、指針數組、函數指針、指針函數,數組指針函數

編輯:關於C語言

數組指針、指針數組、函數指針、指針函數,數組指針函數


1.數組的四種訪問方式

    定義數組 a[]; 指針 *p 指向數組a;

                   (1) 利用數組的下表進行訪問 a[i];

                   (2) 數組名+地址的偏移量i *(a+i)

                   (3) 利用指針 p 進行下表訪問 p[i]

                   (4) 指針p + 地址的偏移量i *(p+i)

                                        一維數組數組名:相當於一個單指針

2.

數組指針(指針)     指針數組(數組)

函數指針(指針)     指針函數(函數)    -------->只看後邊兩個字就能夠區分是指針還是數組或函數

_____________________________________________________________________________

數組指針:(指向數組全部地址的指針)

int a[3]={2,3,4}

int *p = a;                     // 指向數組的指針

int *p1 = &a[0]                  // 指向數組首元素的指針

int (*p2)[3] = &a;                // 數組指針指向數組的全部地址

       3  - >   所指向數組中數據的個數

     &a  表示數組從開始到結束全部的地址空間

_____________________________________________________________________________

指針數組:(保存多個地址的數組)

int a=10;

int b=20;

int c=30;

int *pa[3]={&a,&b,&c};           //保存的是 int* (地址)

_____________________________________________________________________________

函數數指針 (指向函數的指針)     //   函數名代表函數的入口地址

              三個要素: 與所指函數 返回值類型相同,參數類型相同,參數個數相同。

int Max(int a,int b){ }

int (*pfun)(int,int);

main()

{

   Max(12,13);

   pfun=&Max;          ---->         pfun=Max;

   (*pfun)(12,13);     ---->         pfun(12,13);

}

_____________________________________________________________________________

指針函數 (返回類型為指針類型稱為指針函數)

    定義格式: 返回類型標識符 *函數名稱(形式參數表)

             { 函數體 }

_____________________________________________________________________________

3  如何區分:

數組指針:

      定義 int (*p)[n]; ()優先級高,首先說明p是一個指針,指向一個整型的一維數組,

          這個一維數組的長度是n。

指針數組:

      定義 int *p[n]; []優先級高,先與p結合成為一個數組,再由int*說明這是一個整型

          指針數組,它有n個指針類型的 數組元素。

函數指針:

      定義 int (*pfun)(int,int); *pfun在括號內,首先形成指針,出括號後仍為括號,

          指向一個返回值為整形的函數,並且此函數有 兩個整形作為形參。

指針函數:

      定義 int *fun(); 相當於 int* fun(); 返回值為一個整形的指針。

_____________________________________________________________________________

4.復雜指針:


 

    右左法則: 從未定義的標識符開始閱讀,然後先往右看,再往左看。每次遇到圓括號時,掉轉方向。

                   一旦解析完圓括號裡面所有的東西,就跳出圓括號。重復這個過程直到解析完畢。

 

int (*fun)(int *p);

              首先找到那個未定義的標識符,就是fun,它的外面有一對圓括號,而且左邊是一個*號,這說明

                   fun是一個指針,然後跳出這個圓括號,先看右邊,也是一個圓括號,這說明(*func)是一個函數,

                       而fun是一個指向這類函數的指針,就是一個函數指針,這類函數具有int*類型的形參,返回值類型是 int。

 

int (*fun[5])(int *p) ;

           fun右邊是一個[ ],說明fun是一個具有5個元素的數組,fun的左邊有一個*,說明fun的元素是指針,

               要注意這裡的*不是修飾 fun的,而是修飾fun[5]的,原因是[]運算符優先級比*高,fun先跟[]結合,

                  因此*修飾的是func[5]。跳出這個括號,看右邊,也是一對圓括號,說明func數組的元素是函數類型的

                       指針,它所指向的函數具有int*類型的形參,返回值類型為int。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved