Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47669
  • 博文数量: 25
  • 博客积分: 1210
  • 博客等级: 中尉
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-20 20:05
文章存档

2011年(1)

2009年(24)

我的朋友
最近访客

分类: C/C++

2009-04-29 22:23:01

二维数组名(如a)是指向行的,因此a+1中的“1”代表一行中的全部元素所占的字节数。
一维数组名(如a[0])是指向列元素的。a[0]+1中的1代表一个元素所占的字节数。在指向行的指针前面加一个*就转换为指向列的指针,例如,a和a+1是指向行的指针,*a和*(a+1)就变成了指向列的指针,分别指向a数组0行0列的元素和1行0列的元素;在指向列的指针前面加&就成为指向行的指针。例如a[0]是指向0行0列元素的指针,而&a[0]指向二维数组的0行
 
指向多维数组的指针变量:
二维数组指针变量说明的一般形式为:类型说明符  (*指针变量名)[长度]
其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。应注意“(*指针变量名)”两边的括号不可少,如缺少括号则表示是指针数组
*(*(p+i)+j)是指p[i][j]
用指向数组的指针做函数参数:
一维数组名可以作为函数参数传值,多维数组名也可以作为函数参数传递。在用指针变量左形参以接受实参数组名传递来的地址时,有两种方法:1)用指向变量的指针变量;2)用指向一维数组的指针变量,比如:
有一个班,3个学生,各学4门课,计算总平均分以及第n个学生的成绩
# include
 
void average(float *p, int n);
void search(float (*p)[4], int n);
 
void main()
{
      float score[3][4] = {{65, 67, 70, 60}, {80, 87, 90, 81}, {90, 99, 100, 98}};
 
      average(*score, 12);
      search(score, 2);
}
 
void average(float *p, int n)
{
      float * p_end;
      float sum = 0, aver;
       p_end = p+n-1;
 
       for(; p <= p_end; p++)
         sum = sum + (*p);
       aver = sum/n;
       printf("average = %5.2f\n", aver);
}
 
void search(float (*p)[4], int n)
{
      int i;
 
      printf("the socre of No.%d are:\n", n);
 
      for(i = 0; i < 4; i++)
        printf("%5.2f\n", *(*(p+n)+i));
}
阅读(446) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~