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

數組指針 指針數組

編輯:C++入門知識

優先級:()>[]>* 數組指針(指向數組的指針,是一個指針) 定義 int (*p)[n]; ()優先級高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是n,也可以說是p的步長。   也就是說執行p+1時,p要跨過n個整型數據的長度。   如要將二維數組賦給一指針,應這樣賦值: int a[3][4]; int (*p)[4]; //該語句是定義一個數組指針,指向含4個元素的一維數組。  p=a;        //將該二維數組的首地址賦給p,也就是a[0]或&a[0][0]  p++;       //該語句執行過後,也就是p=p+1;p跨過行a[0][]指向了行a[1][]   所以數組指針也稱指向一維數組的指針,亦稱行指針。     指針數組(每個元素師指針的數組,是個數組) 定義 int *p[n]; []優先級高,先與p結合成為一個數組,再由int*說明這是一個整型指針數組,它有n個指針類型的數組元素。   這裡執行p+1是錯誤的,這樣賦值也是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],   而且它們分別是指針變量可以用來存放變量地址。但可以這樣 *p=a; 這裡*p表示指針數組第一個元素的值,a的首地址的值。 如要將二維數組賦給一指針數組: int *p[3]; int a[3][4]; for(i=0;i<3;i++) p[i]=a[i]; 這裡int *p[3] 表示一個一維數組內存放著三個指針變量,分別是p[0]、p[1]、p[2] 所以要分別賦值。   這樣兩者的區別就豁然開朗了,數組指針只是一個指針變量,似乎是C語言裡專門用來指向二維數組的,它占有內存中一個指針的存儲空間。   指針數組是多個指針變量,以數組形式存在內存當中,占有多個指針的存儲空間。 還需要說明的一點就是,同時用來指向二維數組時,其引用和用數組名引用都是一樣的。 比如要表示數組中i行j列一個元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]      

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