读书人

小弟我编了一个程序有些有关问题刚学

发布时间: 2012-02-17 17:50:42 作者: rapoo

我编了一个程序有些问题,刚学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定义不匹配.

读书人网 >C++

热点推荐