几道C语言题 进来看看

来源:百度知道 编辑:UC知道 时间:2024/09/28 15:30:18
看看削下面的输出结果 详细解释下过程步骤 我指针学的很不好 拜托给我讲讲怎么回事
1.
int m(int *x, int y){
*x=*x+y;
y=*x*y;
return y;
}
int main(int argc, char *argv[])
{int i=3;

printf("%d %d",i,m(&i,i));

system("PAUSE");
return 0;
}
2.
int fc(int x, int *j){
*j+=i;

return *j;
}
int main(int argc, char *argv[])
{int i,j=0;
for(i=0;i<4;i++)
i=fc(i,&j);
printf("%d %d",i,j);

system("PAUSE");
return 0;
}

1:printf("%d %d",i,m(&i,i)),由于参数是从右到左压进栈的,所以先执行m(&i,i),由于第一个参数是i的地址,而第二个参数y = 3,是值传递的,也就是一旦进入函数m后,y就是3.所以在函数m中,*x=*x+y;
就是i = 3 + 3 = 6,这个没问题,但y并不会变,所以y=*x*y,就是y = 6 * 3 = 18,返回18,i变成了6.
打印结果就是6 18

2:
有一小错误,函数fc中,应该是*j+=x或者参数x应该是i吧,呵呵.
在for循环中,i = 0时
i = fc(i, &j),而fc函数就是把j加上i并且返回j,第一次后,*j = *j + i,也就是j还是0,返回0,i也是0,

i = 1时,同样fc中,j变改成了1,返回1,i也就不变.
i = 2时,fc中,*j = *j + i,也变成了*j = 1 + 2 ,
返回3,i = 3了,j也是3,此时i++后变成4,循环条件不成立,退出.
此时i = 4,j =3
打印结果4 ,3

你只要记住,如果传入的是指针,那么只要在调用函数中,有*x= 之类的语句,那么该指针指向的值就会更改,而传入的不是指针,一般的类型,那么调用该函数并不影响该对象.

这是天书

子函数中形参中带*号的,则主函数中的实参必须是某变量地址,如数组名或带取地址运算符&

指针 就是 地址。。

int m(int *x, int y){
*x=*x+y; // 这里x是个地址,*x这个地址存的内容,这里地址x内容加y 存入 x 。对应下面传来的参数*x=3+3;
y=*x*y; //y=6*3
return y;
}
int main(int argc, char *argv[])
{int i=3;

printf("%d %d",i,m(&i,i)); //&i变量 i取地址,对应上面指针x。

system("PA