数组与指针
数组的指针是指数组在内存中的起始位置,数组元素的地址是指数组元素在内存中的起始位置。
一维数组的数组名为一维数组的指针,即起始位置。
int a[5];
a为a数组的起始位置
p指向a的首地址,则a[i], *(p+i) , *(x+i)和p[i]具有相同的作用,即访问数组的i+1个元素
#include <iostream>
using namespace std;
int main()
{
int a[]={5,6,2,4,7};
int * p;
p = a;
cout<<"a[3]的值" <<a[3]<<endl;
cout<<"*(p+3)的地址"<<*(p+3)<<endl;
cout<<"*(a+3)的地址"<<*(a+3)<<endl;
return 0;
}
二维数组与指针
a+1 按行移动一次 a[0]+1按列移动一次
#include <iostream>
using namespace std;
int main()
{
int a[3][2]={{5,6},{2,4},{7,2}};
int * p;
int n = sizeof(a)/sizeof(int);
cout<<"a= "<<a<<" a+1="<<a+1<<endl;
cout<<"a[0]= "<<a[0]<<" a[0]+1="<<a[0]+1<<endl;
return 0;
}
行指针——存储行地址的指针变量
基本形式:
<存储类型> <数据类型> (*<指针变量名>)[表达式];
int a[2][3];
int (*p)[3]; //常量数据表示指针加1,移动几个数据
#include <iostream>
using namespace std;
int main()
{
int a[3][2]={{5,6},{2,4},{7,2}};
int (*p)[2];
p=a;
int n = sizeof(a)/sizeof(int);
cout<<"a= "<<a<<" a+1="<<a+1<<endl;
cout<<"p= "<<p<<" p+1="<<p+1<<endl;
cout<<"a[1][1]= "<<a[1][1]<<" p[1][1]="<<p[1][1]<<endl;
return 0;
}
二维数组遍历的几种方式
#include <iostream>
using namespace std;
int main()
{
int a[3][2]={{5,6},{2,4},{7,2}};
int (*p)[2];
p=a;
int n = sizeof(a)/sizeof(int);
int m = sizeof(a)/sizeof(a[0]);
for(int i =0;i<m;i++)
{
for(int j=0;j<n/m;j++)
{
cout<<a[i][j]<<" ";
cout<<p[i][j]<<" ";
cout<<*(*(p+i)+j)<<" ";
cout<<*(*(a+i)+j)<<" ";
}
cout<<endl;
}
return 0;
}