这个C++程序如何修改

来源:百度知道 编辑:UC知道 时间:2024/06/13 10:47:44
题目要求是用指针求一个矩阵所有靠外侧的元素之和,我编的程序如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int *a[4][4],i,j,*sum;
cout<<"Please enter 16 num:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
cin>>a[i][j];
}
for(i=0;i<4;i++) sum+=*(a+i);
for(i=0;i<4;i++) sum+=*(a+1)+i;
for(i=0;i<4;i++) sum+=*(a+2)+i;
for(i=0;i<4;i++) sum+=*(a+3)+i;
sum=sum-(*(a+1)+1)-(*(a+1)+2)-(*(a+2)+1)-(*(a+2)+2);
cout<<sum<<endl;
return 0;
}
我知道问题很多,我的意思是先输入一个4*4的矩阵,然后将矩阵的各行相加,然后再减去中间的那四个元素,可以指出我的问题都出在哪了吗?
但题目要求要指针啊,怎样用指针呢?

为什么把sum定义成指针?指针的话没办法直接累计总和的,而且你也没有初始化它。a不能那么定义,你那定义的结果是个二维的指针的数组,把*去掉。还有(*(a+1)+1)这依然是个指针前面应该还有一个*才行。

#include <iostream>
#include <iomanip>
using namespace std;
#include <iostream>
using namespace std;

int main()
{
int a[4][4],sum=0;
int (*p)[4]; //指向一个4个元素的一维数组的指针
p=a;
cout<<"Please enter 16 num:"<<endl;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++){
cin>>*(*(p+i)+j);
sum+=*(*(p+i)+j);
}
}
sum=sum-*(*(p+1)+1)-*(*(p+1)+2)-*(*(p+2)+1)-*(*(p+2)+2);
cout<<sum<<endl;
return 0;
}

这样应该可以了吧。