指针数组:
首先这是一个数组,数组中的值类型是指针,通常表现为:
template <typename T>
T* Tname[10];
现在我们这儿利用二维数组进行举例:
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[10];
int(*pxx)[10] = (int(*)[10])p;
for (int i = 0; i < 10; i++){
*p++ = i;
}
for (int i = 0; i < 10; i++){
*(pxx[i]) = i;
}
for (int i = 0; i < 10; i++){
cout << *(pxx[i]) << endl;
}
return 0;
}
二维数组举例:
#include <iostream>
#include <string>
using namespace std;
int main(){
int a[3][4];
int(*p)[4] = a;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 4; j++){
a[i][j] = (i + 1)*(j + 1);
*p[j] = a[i][j];
}
p++;
}
cout << "结束" << endl;
int i = 0;
for (p=a; !(p!=a&&p!=&a[1]&&p!=&a[2]); p++){
for (int j = 0; j < 4; j++){
*p[j] = a[i][j];
cout << *p[j] << ",";
}
i++;
cout << endl;
}
return 0;
}
PS:这段代码有问题,因为编译器一直再报数组越界的问题,不过暂时还没有看出什么问题,还望各位不吝赐教。