二维数组的指针复习

最近一次的考试都是指针,真是给我深深上了一课,所以我特此复习一下指针方面的知识。二维数组的指针

int a[3][4]= {{1,3,5,7},{9,11,13,15},{17,19,21,23}};


下面通过一个表来做详细的说明:


访问二维数组,有两种方法,一种是当成一维数组,二是按照二维数组的方式

我们通过几个例子看看:

例1.

#include<stdio.h>
int main () 
{
	int a[3][4]={1,3,5,7,9,11,15,13,17,19,21,23};
	int *p;
	for (p=a[0];p<a[0]+12;p++)
	{
		printf("%4d\n",*p);
	}
return 0;
}
上面p是一个int指针,初始赋予a[0],指向0行0列的元素,而后开始遍历,这里实际上利用了二维数组的一个重要的性质,它的所有元素是连续存储的。
例2.

#include<stdio.h>
int main () 
{
	int a[3][4]={1,3,5,7,9,11,15,13,17,19,21,23};
	int (*p)[4];
	p=a;
	int i=1,j=2;
    printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));
    return 0;
   
}
这里p指向一个由4个int元素组成的数组,p=a;于是p与a一模一样了。

例3.二维数组的传递

有一个班,3个学生,各学4门课,计算总平均分数及第n个学生的成绩

#include<stdio.h>
int main () 
{
	void average(float *p,int n);
	void search(float (*p)[4],int n);
	float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
	average(*score,12);
	search(score,2);
    return 0;
}
void average(float *p,int n)
{

	float * p_end;
	float sum=0,aver;
	p_end=p+n-1;
	for (;p<=p_end;++p)
	{
		sum+=(*p);
	}
	aver=sum/n;
	printf("average=%5.2f\n",aver);
}
void search(float (*p)[4],int n)
{
	int i;
	printf("the score of No. %d are:\n",n);
	for (i=0;i<4;i++)
	{
	printf("%5.2f\t",*(*(p+n)+i));
	}
}
这个例子形象地讲述了如何传递二维数组,既可以当成一位数组传递,也可以当成二维数组传递


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值