用指针访问二维数组

  • 指针类型决定了能访问空间的大小
  • 行指针是指向指针的指针,还有行指针和列指针看待数组的方式不同

行指针 取星 变为列指针,列指针再取星得到元素

*(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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值