码迷,mamicode.com
首页 > 编程语言 > 详细

使用指针形式向函数传递多维数组并在函数内部使用指针形式对多维数组进行引用和修改

时间:2015-06-07 17:19:28      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

定义一个double型二维数组A和另一个同等尺寸的double空二维数组B,编写一个函数将A中的数据复制到B中。并测试该程序。

 1 #include <stdio.h>
 2 void copy_ptr(const double (*s)[12],double (*tar)[12],int row,int col);
 3 int main(void){
 4     const double rain[5][12]={
 5         {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
 6         {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
 7         {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
 8         {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
 9         {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
10     },t1[5][12];
11     copy_ptr(rain,t1,5,12);
12     //printf("%.2f",t1[3][8]);
13     return 0;
14 }
15 void copy_ptr(const double (*s)[12],double (*tar)[12],int row,int col){
16     int i,j;
17     for(i=0;i<row;i++){
18         for(j=0;j<col;j++){
19             *(*(tar+i)+j)=*(*(s+i)+j);
20         }
21     }
22 }

函数原型与函数定义中二维数组参数的写法为

double (*s)[12]

这表示函数接受一个指针参数,该指针指向(具有12个double值的数组)。即子数组。

因为子数组本身又是指向每个单个double值的指针,所以此处double (*s)[12]的意义为 “s是一个指针,它指向(步长为1个double,范围为0~11的指针)”,而s的步长为它指向的指针的总范围。

综上,多维数组实际在值的背后,隐含着一个指针树。或者称为指针链也许更为准确。因为在某个地址未被指向时,那根针实际是不存在的,在一个时间点上,从上至下的指针取值路径总是唯一的,所以呈链式。

使用指针形式向函数传递多维数组并在函数内部使用指针形式对多维数组进行引用和修改

标签:

原文地址:http://www.cnblogs.com/xieshengsi/p/4558633.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!