C++程序求解,并简单解释

来源:百度知道 编辑:UC知道 时间:2024/06/14 15:39:52
#include <iostream.h>
int a[3][3]={1,2,3,4,5,6,7,8,9} *p:
main()
{
p=new int:;
f(p,a);
cout<<*p;
}
f(int *s,int p[][3])
{*s=p[1][1];}
f中对形参s所指向的地址做的任何操作都会反应到实参p上 请问这句话是什么意思啊?
顺便可不可以把里面关键句的解释都说下啊,我给你加20分

f(int *s,int p[][3])
{*s=p[1][1];}
这个是什么意思啊,我一直看不懂

你的程序有错误不能通过编译,我帮你改了下:
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},*p;
int f(int *s,int p[][3])
{
*s=p[1][1];
return 0;
}
void main()
{
p=new int;
f(p,a);
cout<<*p;
}
结果*p=5,函数f中第一个参数为变量指针,第二个参数为数组指针,f中对形参s所指向的地址做的任何操作都会反应到实参p上,因此*s=p[1][1]=5

形参是在函数中使用的参数,例如fun(int a),a就为形参
实参是调用函数时使用的参数,例如声明了fun(int a),在main()中采用
int b=10;
fun(b);
这时b就为实参。
C++中的参数传递方式有三种,分别是传值、传地址和传引用,传值的特点是在函数中对形参进行的修改不会反应到实参中去,例如
void fun(int i)
{
i=10;
}
void main()
{
int n=2;
fun(n);
}
当fun(n)运行完毕后,n的值依旧为2
传引用和传地址两种方式在形参被改变的时候,相应的实参也会变化,例如:
void fun1(int *a) //传地址
{
*a=10;
}
void fun2(int &b)
{
b=20;
}
void main()
{
int c=0;
fun1(c);
c=0;
fun2(c);
}
此时,fun1运行后,c的值变为10,fun2运行后c的值变为20,两种方式所不同的是,fun1传递的是指向变量的指针,也就是内存地址,而fun2传递是该对该内存地址的引用。