C++ 为何会改变行参的值?!

flyxx 2009-02-10 12:24:52
template <class T>
T a(T x[])
{
for(int i = 0; i<10; i++)
{
x[i]=0;
cout << x[i] << endl;
}
}
int main()
{
int *x = new int[10];
int y[10];
for(int i = 0; i<10; i++)
{
y[i] = i;
x[i] = i;
cout << "++++ x[i]=" << x[i] << " y[i]=" << y[i] << endl;
}
a(x);
a(y);

for(int i = 0; i<10; i++)
{
cout << "---- x[i]=" << x[i] << " y[i]=" << y[i] << endl;
}

cout << "测试完毕!任意键继续...." << endl;
cin.peek();
return 0;
}



---------------
运行结果:
++++ x[i]=0 y[i]=0
++++ x[i]=1 y[i]=1
++++ x[i]=2 y[i]=2
++++ x[i]=3 y[i]=3
++++ x[i]=4 y[i]=4
++++ x[i]=5 y[i]=5
++++ x[i]=6 y[i]=6
++++ x[i]=7 y[i]=7
++++ x[i]=8 y[i]=8
++++ x[i]=9 y[i]=9
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
---- x[i]=0 y[i]=0
测试完毕!任意键继续....

为什么函数a()把main函数的两个数组做为行参传递给a(),结果都被a()修改了?!
...全文
131 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqz981 2009-02-10
  • 打赏
  • 举报
回复
你a函数传递的x y 都是地址, 当然直接就修改的所在地址内部了值了。
如果你传递的是值 比如 a(int x) 就另当别论了。
ribut9225 2009-02-10
  • 打赏
  • 举报
回复
呵呵
楼上各位都说了,数组在做函数参数的时候,是传递数据的首地址,当指针用的
sagegz 2009-02-10
  • 打赏
  • 举报
回复
当然一般情况下参数不需要修改都会在参数类型前加上const
sagegz 2009-02-10
  • 打赏
  • 举报
回复
参数为引用或者指针,可以看错是间接对参数进行了修改.
zinoR1 2009-02-10
  • 打赏
  • 举报
回复
数组是特殊的指针
xuedaoli 2009-02-10
  • 打赏
  • 举报
回复
数组退化为指针
scott_2009 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 waizqfor 的回复:]
引用楼主 flyxx 的帖子:
template <class T>
T a(T x[])
{
for(int i = 0; i <10; i++)
{
x[i]=0;
cout < < x[i] < < endl;
}
}
int main()
{
int *x = new int[10];
int y[10];
for(int i = 0; i <10; i++)
{
y[i] = i;
x[i] = i;
cout < < "++++ x[i]=" < < x[i] < < " y[i]=" < < y[i] < < endl;
}
a(x…
[/Quote]
我记得好象是如果参数是引用则不退化,如果是值传递则退化为指针。
cppfaq 2009-02-10
  • 打赏
  • 举报
回复
No matter how we define an array, there is always a fundamental relationship between arrays and pointers: Whenever we use the name of an array as a value, that name represents a pointer to the initial element of the array.
lzh9955 2009-02-10
  • 打赏
  • 举报
回复
up
blingpro 2009-02-10
  • 打赏
  • 举报
回复
关于传值 & “传址”
OenAuth.Net 2009-02-10
  • 打赏
  • 举报
回复
数组退化成指针
weigangme 2009-02-10
  • 打赏
  • 举报
回复
指针
waizqfor 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 flyxx 的帖子:]
template <class T>
T a(T x[])
{
for(int i = 0; i <10; i++)
{
x[i]=0;
cout < < x[i] < < endl;
}
}
int main()
{
int *x = new int[10];
int y[10];
for(int i = 0; i <10; i++)
{
y[i] = i;
x[i] = i;
cout < < "++++ x[i]=" < < x[i] < < " y[i]=" < < y[i] < < endl;
}
a(x);
a(y);

f…
[/Quote]
数组在作为形参被使用的时候 数组名退化为指针去使用!~
内容概要:本文围绕“新型电力系统下多分布式电源接入配电网承载力评估方法”的研究,系统性地介绍了基于Matlab的仿真建模与代码实现方案,旨在评估高比例分布式电源(如光伏、风电等)接入背景下配电网的接纳能力。研究融合了智能优化算法(如蜣螂优化、灰狼优化、遗传算法)、多目标优化、鲁棒优化及双层优化模型,结合潮流计算、稳定性分析与故障仿真,构建了完整的承载力评估体系。文档不仅提供核心算法实现,还拓展至微电网调度、储能配置、电氢耦合系统、电动汽车协同等前沿方向,强调“复现+创新”相结合的科研路径,助力研究者快速掌握高水平论文复现技巧并激发原创思路。; 适合人群:具备电力系统、自动化或相关专业背景,熟悉Matlab/Simulink仿真环境,正在从事科研或工程应用的研究生及初级科研人员(工作1-3年);; 使用场景及目标:①复现高水平期刊中关于配电网承载力的优化模型;②开展高比例可再生能源接入下的配电网规划与运行研究;③学习并应用智能优化算法解决复杂电力系统问题;④获取完整科研资源包以加速课题进展与论文撰写; 阅读建议:建议读者关注公众号“荔枝科研社”获取网盘资源,下载全套代码与模型文件,按照文档结构循序渐进学习,重点理解算法设计逻辑与仿真建模细节,结合所提供的复现案例深化对优化模型与工程应用场景的理解,提升科研效率与创新能力。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧