C++一个很简单的测试程序,帮忙看下为啥这个print函数运行不起

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++一个很简单的测试程序,帮忙看下为啥这个print函数运行不起相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std;
class point

int x,y;

public:
point():x(0),y(0)
point(int a,int b);
point operator+(point &b);
void print();
;
point::point(int a,int b):x(a),y(b)cout<<"a:"<<a<<endl;

void point::print()

cout<<"!!!!";
//cout<<"("<<x<<","<<y<<")";


point point::operator + (point &b)

point s;
s.x=x+b.x;
s.y=y+b.y;
return s;


int main()

point a(2,3);
a.print;
return 0;


为什么print函数就是运行不起啊?

你这200分可不好赚啊,程序写得很乱,又没有任何注释,看了半个小时才看明白你的程序。问题主要是你还没有理解数组作为函数传值的本质。其实数组的传值是跟普通变量的传值不同的,普通变量传值只是把实参的值赋给了函数形参,函数内对形参的修改并不会影响到实参的值,但数组的传值本质就是把数组的首地址传给函数,函数内对数组形参的修改就是对数组实参的修改,类似于普通变量的指针传参的效果。所以你把arr0传给Di函数,在函数中对数组形参arr3的修改就是对arr0的修改了,那k=2,k=3时的结果当然就是由arr3决定了,但归根到底还是由被修改后的arr0决定的。解决问题的方法是,在Di函数内设一临时变量数组arr3,每次开始时用函数形参arr去初始化它,函数结束后,arr3随函数消失,不会修改到arr的值,自然就不会修改到arr0的值了,下次再调用Di时,又是用原来的arr0去初始化新的arr3了。
修改过的可以得到你预期的结果的代码如下:
#include <iostream>
using namespace std;
int DD(int arr2[3][4])

int arr4[3]=,arr5[3]=;
int i,j,k,m=0,n=0,a,b,l,h;
for (j=0;j<=2;j++)

for (i=0;i<=2;i++)

k=i+j;
if(i+j>2)
k=i+j-3;
arr4[j]=arr2[i][k]*arr4[j];

m=arr4[j]+m;

for (b=2;b>=0;b--)

for(a=0;a<=2;a++)

l=b-a;
if(b-a<0)
l=b-a+3;
arr5[b]=arr2[a][l]*arr5[b];

n=arr5[b]+n;

h=m-n;
return (h);

int Di(int arr[3][4],int iNo)

int i,j,k,iDi;
int temp;
int arr3[3][4];//arr3为函数内局部变量,每次执行Di函数都会从新生成并用arr赋值
for(i=0;i<3;i++)
for(j=0;j<4;j++)
arr3[i][j]=arr[i][j];

for (i=0;i<=2;i++) //把第i列和第3列值互换,i=0,1,2,3.

temp=arr3[i][iNo];
arr3[i][iNo]=arr3[i][3];
arr3[i][3]=temp;

for (j=0;j<=2;j++) //输出数组

for (k=0;k<=3;k++)

cout<<arr3[j][k]<<" ";

cout<<endl;

return DD(arr3);

int main()

int arr0[3][4];
float arr1[3];
int i,j,k,L;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
cin>>arr0[i][j];

L=DD(arr0);
cout<<L<<endl;
for (k=0;k<=2;k++)

arr1[k]=Di(arr0,k);
cout <<arr1[k]<<endl;

return 0;

另外,团IDC网上有许多产品团购,便宜有口碑
参考技术A 调用函数的时候即使不需要传入参数,也要记得加上()哈~~
a.print--->a.print();
参考技术B #include<iostream>
using namespace std;
class point

int x,y;

public:
point():x(0),y(0)
point(int a,int b);
point operator+(point &b);
void print();
;
point::point(int a,int b):x(a),y(b)cout<<"a:"<<a<<endl;

void point::print()

cout<<"!!!!";
//cout<<"("<<x<<","<<y<<")";


point point::operator + (point &b)

point s;
s.x=x+b.x;
s.y=y+b.y;
return s;


int main()

point a(2,3);
a.print();
return 0;
参考技术C a.print();本回答被提问者采纳

以上是关于C++一个很简单的测试程序,帮忙看下为啥这个print函数运行不起的主要内容,如果未能解决你的问题,请参考以下文章

想做一个PHP图片上传前预览,麻烦帮忙看下为啥预览不能显示

帮忙看下delphi程序 简单按照书上例子写了程序,运行的时候出现错误

为啥这个看似简单的 C++ 代码会产生分段错误?

关于C++类成员函数转换的疑惑,各位高手帮忙看下··

为啥这个 cpp 程序会失败?

求帮忙写个程序 JAVA C++都行