国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

對C/C++中多維數組指針的理解

2019-11-17 05:10:32
字體:
來源:轉載
供稿:網友
對于多維數組的理解比較困難,這也是由于和一維數組指針含義有沖突造成的,因此對于多維數指針的理解是個比較難,需要反復觀察,謹慎使用,假如多維數組的概念不清楚那就需要從C/C++基礎學起注重知識的積累!

 C 代碼 /*程序作者:管寧 

所有稿件均有版權,如要轉載,請務必聞名出處和作者*/
 
#include <stdio.h> 
main() 
{ 
 static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; /* 定義一個3行4列的二維數組 */
 int *p; 
  printf("%d %d/n",a[0],*(a+0)); 
 printf("%d %d/n",&a[0],&a[0][0]); 
 printf("%d %d/n",a[0][0],*(*(a+0)+0)); 
 for (p=a[0];p<a[0]+12;p++) /* 把a[0]的地址賦予指針變量p,條件判定p<a[0]+12表示的是小于最后一個元素的地址; */
 { 
  if((p-a[0])%4==0) /* 利用整數指針變量p減去當前地址判定出是不是已經顯示出了四個值,換行回車 */
  { 
   printf("/n"); 
  } 
  printf("%4d",*p); /* 打印出元素的值 */
 } 
 printf("/n"); 
} 
 
/* 
第5行中的a和*a打印出來的值,就會讓人弄不明白我們知道數組傳遞的地址那么a表示這個數組的其實地址為什么*a卻不是實際值呢?原因是在多維數組中a+0表示的是第0行的首地址,a+1表示是第一行的首地址,那么*a其實就是*(a+0),那么第一個元素其實是a[0][0]
而*(a+0)僅僅是把一個3行4列的二維數組拆為了三個一維數組,*(a+0)顯然表示的不是物理位置也就不可能得到第一個元素的值了,它僅僅是一個內存地址也就是第0行的啟始地址,再看8行中的*(*(a+0)+0),它表示的則是第0行第0列個元素的值也就是a[0][0],再次強調*(a+0)表示的是數組第一行的首地址,也就是第二行的*(a+1),而元素值要得到顯然就是*(*(a+0)+0)了假如是第0行第1個也就是*(*(a+0)+1)。
*/

  下面這個例子可以幫助我們理解多維數組指針作為函數參數傳遞的使用方法,通過這段代碼可以幫助你更好的理解多位數組指針。

 C 代碼  
/*程序作者:管寧 

所有稿件均有版權,如要轉載,請務必聞名出處和作者*/
 
#include <stdio.h> 
 
main() 
{ 
 void search_score(); /* 定義自定義涵數類型為不返回型 */
 void count_avg(); /* 定義自定義涵數類型為不返回型 */
 static float a[3][4]={{97,45.5,66,77},{88,92.5,78.5,66},{83,74.5,92,100}}; /* 輸入3個學生的各自4門課的成績 */
 search_score(a,0); /* 調換自定義涵數顯示其中一個同學的各門課成績 */
 count_avg(*a,12); /* 調換自定義涵數顯示3個同學各門課的平均成績成績 */
 /* 注重上面的*a其實也就是a[0]或者是&a[0][]0將這行改寫成count_avg(a[0],12);或者count_avg(&a[0][0],12)也都是對的 */
} 
 
void search_score(p,n) 
float (*p)[4]; /* 定義一個指針變量p,說明它是一個指向一個包含4個整型變量一維數組的指針 */
int n; /* 定義形式參數n為整形 */
{ 
 int i; /* 定義用于循環的變量i */
 for (i=0;i<4;i++ ) /* 這里循環4次用于打印一個同學的4門課成績 */
 { 
  printf("%7.2f",*(*(p+n)+i)); 
 } 
 printf("/n"); 
} 
 
void count_avg(p,n) 
float *p; 
int n; 
{ 
 float *p_end; 
 float sum = 0; 
 float avg; 
 p_end = p+n-1; /* 計算出最后一個數組元素的地址 */
 for (;p<=p_end;p++) /* 循環到最后一個元素地址就停止 */
 { 
  sum += *p; 
 } 
 avg = sum/n; 
 printf("avg=%7.2f/n",avg); 
} 
 
/* 
注重此題的意思在于輸入3個同4門課的成績,計算出平均值和顯示其中一個同學的4門課成績,此例是對多維數組指針和多維數組 
的指針作為涵數參數傳遞的總結,認真聯系和體會可以很好的了解多維數組指針的概念到底是什么! 
*/
更多文章 更多內容請看C/C++技術專題專題,或 right">(出處:清風軟件下載學院)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 莱芜市| 泾川县| 双辽市| 牡丹江市| 大英县| 岗巴县| 巧家县| 靖宇县| 临夏市| 沂源县| 巩留县| 潮州市| 米林县| 瑞安市| 惠东县| 宜黄县| 如东县| 松溪县| 扬中市| 南投市| 靖江市| 葵青区| 罗定市| 苏州市| 绥化市| 化隆| 德州市| 桓台县| 徐州市| 芜湖市| 鄂托克前旗| 甘孜县| 吉首市| 略阳县| 淄博市| 元朗区| 邢台县| 泰宁县| 西平县| 兴宁市| 龙泉市|