- 指针类型决定了能访问空间的大小
- 行指针是指向指针的指针,还有行指针和列指针看待数组的方式不同
行指针 取星 变为列指针,列指针再取星得到元素
*(a+2) *(a+2)+3 *(a[2]+3)
同时有 :*(*(a+i)+j) === *(a[i]+j) === a[i][j]
&a是取出整个二维数组的编码,+1则跳过整个二维数组的内容
注:[]的优先级高于*
以一维数组的角度看待数组
int a[3][4];
int*p=&a[0][0];
for(int i=0;i<3;i++)
for(int j=0;j<0;j++)
*(p++)=i+j; //相当于*p=i+j;p++;
在这里,p指针“认为”它指向的是一个一维数组,每个元素都是int型的,共有12个元素。
i *(*(p+i)+j=i+j;以二维数组的角度看待数组
int a[3][4]={};
int(*p)[4];
p=a;
for(int i=0;i<3;i++)
for(int j=0;j<0;j++)
*(*(p+i)+j)=i+j; //相当于 p[i][j] , a[i][j] , *(*a+i)+j)
p是指向了一个包含了4个整数的一维数组,p和a看待数组的方式是完全相同的
char*str[3]={"a","b","c"};
//表示一个名叫str的具有三个元素的数组,数组里存的是字符型的指针,指针数组str:str[0]=&a,同理;
注:二维数组作为参数的特点是:形参数组和实参数组是同一个数组。
例:求3个学生的平均成绩并打印出第a个学生的成绩
#include <iostream>
using namespace std;
void average(float*p,int n){
float*p_end;
float sum=0,aver;
p_end=p+n;
for(;p<p_end;p++){
sum=sum+(*p);
}
aver=sum/n;
cout<<"所有学生的平均成绩为: "<<aver<<endl;
}
void search(float(*p)[4],int n){
int i;
cout<<"第"<<n<<"个学生的成绩为: ";
for(i=0;i<4;i++){
cout<<*(*(p+n-1)+i)<<" ";
}
}
int main(){
int a;
float score[3][4]={{77,77,77,77},{88,88,88,88},{99,99,99,99}};
average(&score[0][0],12);
cout<<"请输入需要打印的学生序号:";
cin>>a;
search(score,a);
return 0;
}