[問題] C與C++將二維陣列當參數傳給一個指標比較
遇到的問題: (題意請描述清楚)
剛剛爬文有大概知道,但是還是想和大家討論看看。
感覺我的觀念很不清楚>"<
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
02/08 20:07, 1F
→
02/08 20:07, , 2F
02/08 20:07, 2F
→
02/08 20:08, , 3F
02/08 20:08, 3F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章