以下是引用xg5699在2011-9-22 23:41:34的发言:
美女我来了#include <iostream>
using namespace std;
int add(int *p1,int *p2)
{
int i;
for(i=0;i<5;i++)
{
cout<<"int ,int )";
}
return (*p1+i)+(*p2+i); //*p1是代表p1本身的数值,而传递近来的p1是个数组那么*p1代表着p[0]中的元素的数据,而*(p1+i)就是将p1的地址加i了,所以会出错,重载是没有问题的
//return (p1[0]+i)+(p2[0]+i);//和上面一样可以说是上面的原形
}
char add(char *p1,char *p2)
{ int i;
for(i=0;i<5;i++)
cout<<"(char ,char)";
return *(p1+i)+*(p2+i);//这个是错误的
}
void main()
{
int a[5]={1,2,3,4,5};
int b[5]={5,4,3,2,1};
int c;
c=add(a,b);
cout<<c<<endl;
}
“return
(*p1+i)+(*p2+i);
//*p1是代表p1本身的数值,而传递近来的p1是个数组那么*p1代表着p[0]中的元素的数据,而*(p1+i)就是将p1的地址加i了,所以会出错,重载是没有问题的”说明这位仁兄根本不懂指针运算,地址加1是指向数组下一个元素!
找你这样改只不过恰好是用5+(i=4)来得到结果而已,如果要得到a的数组最后一位与b的数组最后一位相加,完整程序如下:
程序代码:
#include <iostream>
using namespace std;
int add(int *p1,int *p2)
{
int i,j;
for(i=0;i<sizeof(p1);i++) ;
for(j=0;j<sizeof(p2);j++) ;
cout<<"(int,int):";
return *(p1+i)+*(p2+j);
}
char add(char *p1,char *p2)
{
int i,j;
for(i=0;i<sizeof(p1);i++) ;
for(j=0;j<sizeof(p2);j++) ;
cout<<"(char ,char):";
return *(p1+i)+*(p2+j);
}
int main()
{
int a[5]={1,2,3,4,5};
int b[5]={5,4,3,2,1};
int c;
c=add(a,b);
cout<<c<<" "<<endl;
return 0;
}