我编了一个程序有些问题,刚学C++不久,想请教一下
我的程序是4*5矩阵,用new动态申请,做加减,不知道犯了什么问题?
关于指针数组函数参数搭配问题很晕,高人可否讲一下?谢谢啦
#include <iostream>
using namespace std;
void print(int array[][5]);
void add(int *p1,int *p2);
main()
{
int i,j ;
int **num1 = new int *[5]; //保证所申请的内存空间与所需矩阵相符(有足够空间)
for( i=0 ;i <5 ;i++ )
num1[i] = new int[5];
cout < < "请输入A1矩阵: " < <endl;
for( i=0 ; i <4 ; i++ )
{
for( j=0 ; j <5; j++ )
cin> > num1[i][j];
cout < <endl ;
}
int s,t;
int **num2 = new int *[5]; //保证所申请的内存空间与所需矩阵相符(有足够空间)
for( i=0 ;i <5 ;i++ )
num2[i] = new int[5];
cout < < "请输入A2矩阵: " < <endl;
for( s=0 ;s <4 ;s++ )
{
for( t=0; t <5; t++ )
cin> > num2[s][t];
cout < <endl ; }
add(num1,num2); //此处错误,是不是我参数类型不搭配,显示C:\Documents and Settings\liuxiaochen\桌面\未命名3.cpp cannot convert `int** ' to `int* ' for argument `1 ' to `void add(int*, int*) '
for( i=0;i <4;i++ )
delete []num1[i];
delete []num1 ;
delete []num2;
cout < <endl ;
system( "pause ");
}
void print(int **p)
{
int i,j;
for( i=0 ; i <4 ; i++ )
{
for( j=0 ; j <5 ; j++ )
cout < <*(*(p+i)+j) < < " " ;
}
cout < <endl ;
}
void add(int **p1,int **p2)
{
int s;
int **num3 = new int *[5]; //保证所申请的内存空间与所需矩阵相符(有足够空间)
//cout < <sizeof(int**) < <endl ;
for( s=0 ;s <5 ;s++ )
num3[s] = new int[5];
int i,j;
for(i=0;i <4;i++)
for(j=0;j <5;j++)
**num3=*(*(p1+i)+j)+ *(*(p2+i)+j);
cout < < "A1+A2是: " < <endl;
print(num3);
}
[解决办法]
也是初学,好像声明 void add(int *p1,int *p2); 改成 void add(int **p1,int **p2);就OK了,VC6上测试通过!
[解决办法]
初看楼主的程序就觉得问题不少.
函数声明与实现形参不一致比如:void print(int array[][5]);void add(int *p1,int *p2);而实现却是void add(int **p1,int **p2),void print(int **p)
至于程序的逻辑没仔细看,代码太晦涩了(累呀!!)
[解决办法]
没看,类型肯定不对,
void add(int *p1,int *p2);
void add(int **p1,int **p2)都改成这个就对了
[解决办法]
ADD前置声明参数类型与ADD定义不匹配.