#include <bits/stdc++.h>
using namespace std;
#define HODOR long long int
#define INF 1234567890
#define rep(i, a, b) for(int i = (a); i < (b); ++i)
#define dwn(i, a, b) for(int i = (a); i >= (b); --i)
#define REP(c, it) for( typeof( (c).begin()) it = (c).begin(); it != (c).end(); ++it)
#define DWN(c, it) for( typeof( (c).end()) it = (c).end()-1; it >= (c).begin(); --it)
#define ss(n) scanf("%s",n)
#define FILL(x,y) memset(x,y,sizeof(x))
#define pb push_back
#define mp make_pair
#define ALL(v) v.begin(), v.end()
#define sz(a) ((int)a.size())
#define SET(v, i) (v | (1 << i))
#define TEST(v, i) (v & (1 << i))
#define TOGGLE(v, i) (v ^ (1 << i))
#define gc getchar
#define pc putchar
template<typename X> inline void inp(X &n ) {
register int ch=gc();int sign=1;n=0;
while( ch < '0' || ch > '9' ){if(ch=='-')sign=-1; ch=gc();}
while( ch >= '0' && ch <= '9' ) n = (n<<3)+(n<<1) + ch-'0', ch=gc();
n=n*sign;
}
inline void inps(char *n) {
register int ch=gc();
int sign=1;
int i=0;
while( ch != '\n' ){ n[i]=(char)ch; ++i; ch=gc();}
n[i]='\0';
}
int MaxPath(int arr[][100],int n) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
}
int main() {
int t,n;
inp(t);
while(t--) {
inp(n);
int arr[n][n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
inp(arr[i][j]);
}
}
float result = MaxPath(arr,n);
}
return 0;
}
错误似乎是这样:错误:无法将参数'1'的'int()[n]'转换为'int()[100]'到' int MaxPath(int(*)[100],int)'
我在stckoverflow上看过很多帖子,但其中没有一个似乎在起作用
答案 0 :(得分:1)
你可以像这样
作为指向int的指针传入 int MaxPath(int** arr,int n)
但为了实现这一点,你必须以不同的方式声明int arr [n] [n]
int main() {
int t,n;
inp(t);
while(t--) {
inp(n);
int** arr = new int*[n];
for (int i = 0; i < n; i++)
arr[i] = new int[n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
inp(arr[i][j]);
}
}
float result = MaxPath(arr,n);
}
//deallocate arr
for (int i = 0; i < n; i++)
{
delete[] arr[i];
}
delete []arr;
return 0;
}
答案 1 :(得分:0)
编译器需要能够在MaxPath中计算存储数据项的地址。只有在知道矩阵的宽度时才可以这样做。
最简单的解决方案之一是创建某种矩阵类,在矢量上实现两(或多)维类型。它看起来像这样:
#include <vector>
#include <stdio.h>
template<class T> class matrix
{
std::vector<T> v;
int width;
public:
matrix(int w, int h): v(w*h),width(w) {}
T &operator()(int x, int y) { return v[x+y*width]; }
const T &operator()(int x, int y) const { return v[x+y*width]; }
};
void f(matrix<int> &m)
{
printf("%d\n",m(1,2));
}
int main()
{
matrix<int> m(5,5);
m(1,2)=42;
f(m);
}
这只是一个最小的例子,您可能需要扩展真实世界应用程序的矩阵类。