指针和二维数组
如果定义二维数组:
T a[M][N];
a[i](i是整数)是一个一维数组
a[i]的类型是T*
sizeof(a[i])=sizeof(T)*N
a[i]指向的地址:数组a的起始地址+i X N X sizeof(T)
void Reverse(int *p,int size){//颠倒一个数组
for (int i=0;i<=size/2;++i){
int tmp=p[i];
p[i]=p[size-1-i];
p[size-1-i]=tmp;
}
}
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
得到:
Reverse(a[1],4);
=>{{1,2,3,4},{8,7,6,5},{9,10,11,12}};
Reverse(a[1],6);
=>{{1,2,3,4},{10,9,5,6},{7,8,11,12}};
指向指针的指针
定义:
T ** p;
p是指向指针的指针,p指向的地方应该存放着一个类型为T*的指针
*p的类型是T*
#include <iostream>
using namespace std;
int main(){
int **pp;//指向int*类型指针的指针
int *p;
int n=1234;
p=&n;//p指向n
pp=&p;//pp指向p
cout<<*(*pp)<<endl;//*pp是p,所以*(*pp)就是n
return 0;
}
=>1234