取得多維陣列某一未知維度的長度


Recommended Posts

下面是一個簡單的小程式

目的在於列印二維陣列

第二維度的長度都是相同的

但第一維度的長度對於列印函數來說都是未知

因為函數型態不是char所以str的函數不能用

請問程式碼中/*?*/的部分要如何寫呢?

#include<iostream>
using namespace std;
int print(int [][5]);
int main()
{
int txf[2][5]={{1,1,1,1,1},{2,2,2,2,2}};
int fxf[4][5]={{4,4,4,4,4},{5,5,5,5,5},{6,6,6,6,6},{7,7,7,7,7}};
print(txf);
system("pause");
return 0;
}
int print(int q[][5])
{
for(int z=0;z</*?*/;z++)
{
for(int x=0;x<5;x++)
cout<<q[z][x]<<'\t';
cout<<'\n';
}
}

鏈接文章
分享到其他網站

剛剛編譯執行失敗~

我原本也是這樣想

用sizeof()查txf會得到40

sizeof(int)=4

40=sizeof(int)*5*所求

但是打進去發現他甚麼都印不出來

好像是因為sizeof()是在編譯時運算的函數,在程式執行時已經是常數了

不知道還有沒有其他方法?

此內容已被編輯, ,由 aalexx
鏈接文章
分享到其他網站
  • 5 weeks later...

老實說,我也不是很清楚

我上知識+查的,

它說「陣列大小的計算僅適用於靜態陣列,若是當成參數傳給 Function,Function 收到的只是一個指標,所以並無法計算陣列的大小」

所以我想:或許你可以把函式宣告改成

int print(int [][5],int n);

使用時:print(txf, sizeof(txf) / 5 / sizeof(int));

把 /*?*/ 改成 n 。

不過缺點是當陣列一多就很麻煩了。

等待專家解答。:|

P.S. 參考來源:

如何取得C++陣列大小 <-----(他是問一維陣列,應該是很類似的問題)

http://tw.knowledge.yahoo.com/question/question?qid=1405110204987

鏈接文章
分享到其他網站

#include <iostream>
using namespace std;

template <typename t, size_t s>
void print(t (&q)[s][5])
{
for(int z=0;z<s;z++)
{
for(int x=0;x<5;x++)
{
cout<<q[z][x]<<'\t';
}
cout<<'\n';
}
}

int _tmain(int argc, _TCHAR* argv[])
{
int txf[2][5]={{1,1,1,1,1},{2,2,2,2,2}};
int fxf[4][5]={{4,4,4,4,4},{5,5,5,5,5},{6,6,6,6,6},{7,7,7,7,7}};
print(txf);
cout<<'\n';
print(fxf);
system("pause");
return 0;
}

鏈接文章
分享到其他網站

請登入後來留意見

在登入之後,您才能留意見



立即登入