程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用指針形式向函數傳遞多維數組並在函數內部使用指針形式對多維數組進行引用和修改,指針多維

使用指針形式向函數傳遞多維數組並在函數內部使用指針形式對多維數組進行引用和修改,指針多維

編輯:關於C語言

使用指針形式向函數傳遞多維數組並在函數內部使用指針形式對多維數組進行引用和修改,指針多維


定義一個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的步長為它指向的指針的總范圍。

綜上,多維數組實際在值的背後,隱含著一個指針樹。或者稱為指針鏈也許更為准確。因為在某個地址未被指向時,那根針實際是不存在的,在一個時間點上,從上至下的指針取值路徑總是唯一的,所以呈鏈式。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved