指針數組:
首先這是一個數組,數組中的值類型是指針,通常表現為:
template <typename T>
T* Tname[];
現在我們這兒利用二維數組進行舉例:
int a[3][4];
int *p[3];
p[0]=a[0];//注意,這兒不能讓p[0]=a/&a[0],因為會發生類型不比對了,編譯器會提示int(*)[4]->int *類型的實體
p[1]=a[1];
p[2]=a[2];
數組指針:
首先這是一個指針,指向某種類型的一個數組,通常變現形式為:
template <typename T,int n>
T (*Tname)[n]/T (*)[n] Tname;
現在我們使用二維數組進行舉例:
int a[3][4];
int (*p)[4];
p=a/&a[0];
p++;
因為優先級順序:()>[]>*,是以這樣導緻了判斷類型到底是數組指針還是指針數組。
簡單舉例:
#include <iostream>
#include <string>
using namespace std;
int main(){
int* p = new int[];
int(*pxx)[] = (int(*)[])p;
for (int i = ; i < ; i++){
*p++ = i;
}
for (int i = ; i < ; i++){
*(pxx[i]) = i;
}
for (int i = ; i < ; i++){
cout << *(pxx[i]) << endl;
}
return ;
}
二維數組舉例:
#include <iostream>
#include <string>
using namespace std;
int main(){
int a[][];
int(*p)[] = a;
for (int i = ; i < ; i++){
for (int j = ; j < ; j++){
a[i][j] = (i + )*(j + );
*p[j] = a[i][j];
}
p++;
}
cout << "結束" << endl;
int i = ;
for (p=a; !(p!=a&&p!=&a[]&&p!=&a[]); p++){
for (int j = ; j < ; j++){
*p[j] = a[i][j];
cout << *p[j] << ",";
}
i++;
cout << endl;
}
return ;
}
PS:這段代碼有問題,因為編譯器一直再報數組越界的問題,不過暫時還沒有看出什麼問題,還望各位不吝賜教。
參考:http://www.cnblogs.com/mq0036/p/3382732.html