指針數組

指針數組

C語言C++語言中,數組元素全為指針的數組稱為指針數組。

一維指針數組的定義形式為:“類型名 *數組標識符[數組長度]”。

例如,一個一維指針數組的定義:int *ptr_array[10]。

基本介紹

  • 中文名:指針數組
  • 外文名:pointer array
  • 主要運用:作為函式的參量
  • 運用領域:計算機編程
  • 來源C語言C++語言
  • 本質:“數組”
含義,運用,對比,與數組指針關係,與二維數組對比,舉例,

含義

指針數組中的每一個元素均為指針,即有諸形如“ptr_array[i]”的指針。由於數組元素均為指針,因此ptr_array[i]是指第i+1個元素的指針。
例如二維指針數組的定義為:char *ptr_array[][3]={{"asdx","qwer","fdsfaf"},
{"44444","555","6666"},
{"a78x","q3er","f2f"}};
二維數組中的元素亦可以表示為“*(*(ptr_array+i))”。又因為“()”的優先權較“*”高,且“*”是右結合的,因此可以寫作**(ptr_array+i),表示第‘i+1’行的第一個元素。*(*(ptr_array+i)+j)表示第i+1行第j+1個元素。

運用

指針數組可以作為函式的參量使用,使用方式與普通數組類似。
指針數組常適用於指向若干字元串,這樣使字元串處理更加靈活方便。

對比

與數組指針關係

數組指針是指向數組首元素的地址的指針,其本質為指針(這個指針存放的是數組首地址的地址,相當於2級指針,這個指針不可移動); 指針數組是數組元素為指針的數組,其本質為數組。
例如:*p[2]是指針數組,實質是一個數組,裡面的兩個元素都是指針, []的優先權比*的優先權高,p先與[]結合,形成數組p[2],有兩個元素的數組,再與*結合,表示此數組是指針類型的,每個數組元素相當於一個指針變數

與二維數組對比

二維數組:如char string_1[10][10]只要定義了一個二維數組,無論賦不賦值,系統都會給他分配相應空間,而且該空間一定是連續的。其每個元素表示一個字元。我們可以通過指定下標對其元素進行修改。
指針數組:如char *str_B[5] 系統至少會分配5個連續的空間用來存儲5個元素,表示str_B是一個5個元素的數組,每個元素是一個指向字元型數據的一個指針。如果我做這樣的定義:
指針數組
char a[3][8]={"gain","much","strong"};
char *n[3]={"gain","much","strong"};
他們在記憶體的存儲方式分別如右圖所示,可見,系統給數組a分配了
3×8的空間,而給n分配的空間則取決於具體字元串的長度。
此外,系統分配給a的空間是連續的,而給n分配的空間則不一定連續。
由此可見,相比於比二維字元數組,指針數組有明顯的優點:一是指針數組中每個元素所指的字元串不必限制在相同的字元長度;二是訪問指針數組中的一個元素是用指針間接進行的,效率比下標方式要高。 但是二維字元數組卻可以通過下標很方便的修改某一元素的值,而指針數組卻無法這么做。

舉例

數組指針:
#include<stdio.h>int main(){    char c[][4] = {"哥", "哥", "我", "岸", "上", "走"};    //UTF-8:一個漢字=3個位元組   char (*p)[4];   int i;    p=c;    //將指針定位於c[0]    for(i=0;i<=5;i++)    {        printf("%s, ", *(p+i));  //或者將*(p+i)替換成*p++    }    printf("\n");        for(i=5;i>=0;i--)    {        printf("%s,",*(p+i));    //或者將*(p+i)替換成*--p    }    return 0;}
指針數組:
#include<stdio.h>int main(){    int i;  char *pch[6] = {"妹","妹","你","坐","船","頭"};    for(i=0;i<6;i++){        printf("%s, ",pch[i]);     }     printf("\n");     for(i=5; i>=0; i--){         printf("%s\n",pch[i]);     }    return 0;}

相關詞條

熱門詞條

聯絡我們