注册 登录
编程论坛 C++教室

求助指针问题

wandou08 发布于 2008-10-05 10:15, 740 次点击
main()
{.......
double t[3};


   t[i]=i;
det(t)
..........
}
det(double *t)
 {int i;
  double t1[3];
  t1=t;
  for(i=0;i<3;i++)
  t1[i]=i+1;
  }
我想问一下,t1[i]变了,这时候main函数中的t[i]也变了吗?
如果t1=t改成:
for(i=0;i<3;i++)t1[i]=t[i];那么最终main函数中的t[i]会变吗?是否还是原来的值?
请高手帮忙谢谢!
9 回复
#2
wandou082008-10-05 10:18
落下一句main函数是这样的:

main()
{.......
double t[3};
for(i=0;i<3;i++)
t[i]=i;
det(t)
..........
}
#3
blueboy820062008-10-05 12:16
你学过 变量 作用域和生存周期 的知识吗?
建议你好好学一下...
#4
ml2325282008-10-05 13:02
det(double *t)
{int i;
  double t1[3];
  t1=t;//能编译通过吗 t1好像是常量
  for(i=0;i<3;i++)
  t1[i]=i+1;
  }

改成这样试试
det(double *t)
{
  int i;
  for(i=0;i<3;i++)
  t[i]=i+1;
 }
#5
wandou082008-10-05 13:24
多谢各位热心的帮助!
t1=t,我觉的是将t[]首地址t[0]传给t1,这样就能够实现t1指向t中的对象。
我看过那些,但还是不明白,所以想主要问一下,t1=t,赋值的是地址,所以当t1的元素变化时,t的元素变吗?
#6
飞天舞xsj2008-10-05 15:46
t1=t,这本身就有问题,楼主好像有关指针的有效传递没搞清楚啊
#7
kakaqq2008-10-07 21:10
[bo][un]飞天舞xsj[/un] 在 2008-10-5 15:46 的发言:[/bo]

t1=t,这本身就有问题,楼主好像有关指针的有效传递没搞清楚啊

他就是这问题没搞清楚。
#8
冰烨2008-10-09 09:19
double t1[3];
  t1=t;

这本身就是错误的,t1是个数组,而数组名可看成一个常指针,const型的是不能被赋值的。

当你这样调用det(t)时候,数组t会被强制解释成指针作为实参传入。根据指针本质,存放地址,所以,det的形参t便也存放了原数组的首地址
所以进入det后,只要对det中的t操作就是对main中的t操作。但是记住数组是不能能过数组名来赋值的。
#9
冰烨2008-10-09 09:22
for(i=0;i<3;i++)t1[i]=t[i];那么最终main函数中的t[i]会变吗?是否还是原来的值?
如果是这种情况的话,t1会是在det中的另一空间,只是值与t的相等,所以改变t1[i]对t[i]没有影响
1