複製鏈接
請複製以下鏈接發送給好友

指針數組

鎖定
在C語言和C++等語言中,數組元素全為指針變量的數組稱為指針數組,指針數組中的元素都必須具有相同的存儲類型、指向相同數據類型指針變量。指針數組比較適合用來指向若干個字符串,使字符串處理更加方便、靈活。一維指針數組的定義形式為:“類型名 *數組標識符[數組長度]”。 [1] 
中文名
指針數組
外文名
pointer array
主要運用
作為函數的參量
運用領域
計算機編程
來    源
C語言和C++語言
本    質
“數組”

目錄

指針數組含義

指針數組,就是説首先是一個數組,而數組的元素是指針,也就是説,如果數組元素都是相同類型的指針,則稱這個數組為指針數組。所謂相同類型的指針是説指針所指向的對象類型是相同的。一維指針數組的定義形式為:
指針數組中的每一個元素均為指針,即有諸形如“ptr_array[i]”的指針。由於數組元素均為指針,因此ptr_array[i]是指第i+1個元素的指針。 [2] 
例如二維指針數組的定義為:char *ptr_array[3][3]={{"asdx","qwer","fdsfaf"},{"44444","555","6666"},{"a78x","q3er","f2f"}};

指針數組運用

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

指針數組對比

定義不同
數組指針是指向數組首元素的地址的指針,其本質為指針(這個指針存放的是數組首地址的地址,相當於2級指針,這個指針不可移動);指針數組是數組元素為指針的數組,其本質為數組。 [3] 
所佔存儲空間的區別
數組指針只是一個指針變量,是C 語言裏專門用來指向二維數組的,它佔有內存中一個指針的存儲空間。指針數組是多個指針變量,以數組形式存在內存當中,佔有多個指針的存儲空間.
應用上的區別
指針數組一般用於處理二維數組。指向一維數組的指針變量用於處理二維數組也是非常方便的。
數組指針和指針數組在處理同一個二維數組時,數組指針的元素個數和指針數組的數組長度不相同,數組指針的元素個數和二維數組的列長度相同。 而指針數組的數組長度和二維數組的行長度相同。
在處理字符串的問題上,使用指針數組處理就比使用數組指針方便多了。因為多個字符串比用二維字符數組處理字符串更加方便,更加的節省內存空間。 [4] 
圖1 指針數組 圖1 指針數組
指針數組:如char *str_B[5] 系統至少會分配5個連續的空間用來存儲5個元素,表示str_B是一個5個元素的數組,每個元素是一個指向字符型數據的一個指針。如果定義如下數組:
char a[3][8]={"gain","much","strong"};
char *n[3]={"gain","much","strong"};
他們在內存的存儲方式分別如圖1所示,可見,系統給數組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;

}
參考資料
  • 1.    郭增富,薛君.單片機應用技術:華中科技大學出版社,2017.2
  • 2.    張小軍, 張晶. 辨析指針數組與數組指針[J]. 河南教育學院學報:自然科學版, 2017(1):68-71.
  • 3.    劉振安,劉燕君.C語言解惑 指針、數組、函數和多文件編程:機械工業出版社,2017.1
  • 4.    宋靈香, 趙靜, 劉運奇. 分析指針數組與數組指針的區別和應用[J]. 甘肅高師學報, 2012, 17(2).