[問題] C與C++將二維陣列當參數傳給一個指標比較

看板C_and_CPP (C/C++)作者 (嘿嘿...)時間16年前 (2010/02/08 20:05), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 剛剛爬文有大概知道,但是還是想和大家討論看看。 感覺我的觀念很不清楚>"< 1.C與C++,C不會檢查函數參數型態? 所以compiler會過~ 而C++會檢查,所以一定傳相對應的型態? 所以在C,若用void print(int *p,int x,int y) 僅是告訴compiler我傳一個address過來 若用void print(int (*p)[10],int x,int y) 告訴compiler我傳一個二維陣列過來 *那請問C++的形式參數有別的宣告方式嗎? 我覺得好難記得=.= 2.C與C++在利用指標列印出陣列值時,是否因為形式參數定義的關係而有所不同? *(p+a*y+b)====>因為傳個位置過去,因此才要算相對應的address。 *(*(p+a)+b))==>是因為形式參數已經告訴compiler,p是二維陣列. 謝謝各位~ 希望得到的正確結果: 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) 有問題的code: (請善用置底文標色功能) C: #include <stdio.h> #include <stdlib.h> void print(int *p,int x,int y) { int a,b; for(a=0;a<x;a++) for(b=0;b<y;b++) printf("v[%d][%d]=%d\n",a,b,*(p+a*y+b)); } int main(void) { int v[2][10]; int count=0; int i,j; for(i=0;i<2;i++) for(j=0;j<10;j++) v[i][j]=++count; print(v,2,10); system("pause"); return 0; } C++: #include <iostream> #include <cstdlib> using namespace std; void print(int (*p)[10],int x,int y) { for(int a=0;a<x;a++) for(int b=0;b<y;b++) cout << *(*(p+a)+b) << endl; } int main(void) { int v[2][10]; int count=0; for(int i=0;i<2;i++) for(int j=0;j<10;j++) v[i][j]=++count; print(v,2,10); system("pause"); return 0; } 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.229.194.129

02/08 20:07, , 1F
1. C對於指標間轉換比較鬆 C++比較嚴 這樣而已
02/08 20:07, 1F

02/08 20:07, , 2F
宣告則都差不多
02/08 20:07, 2F

02/08 20:08, , 3F
2. 是的 宣告的型態影響後續對它的存取方法
02/08 20:08, 3F
文章代碼(AID): #1BR_u0Y1 (C_and_CPP)
文章代碼(AID): #1BR_u0Y1 (C_and_CPP)