c++ 参数传递的问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 12:12:22
#include <iostream>
using namespace std;
int main()
{ void t(int array[],int n);
int a[10],i;
cout<<"请输入十个整数:"<<endl;
for (i=0;i<10;i++) cin>>a[i];
t(a,10);
for (i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
void t(int array[],int n)
{ int i,j,k;int temp;
for (i=0;i<n-1;i++)
{ k=i;
for (j=i+1;j<n;j++)
if (array[k]>array[j])
{

temp=array[k];
array[k]=array[j];
array[j]=temp;
}

}
} 这个是对数组中10个数按由小到大排序的问题,调用函数后主函数数组的值变了。为什么?
为什么那个老被拿来做例子的交换两个整数的却不行?

因为 你用的是 数组做参数,数组做参数时 传入的是数组的地址 ,

既然是数组的地址,

那么就相当于你直接操纵主程序中定义的数据

那个老被拿来做例子的交换两个整数的函数 是传递的实参的值

简而言之, 一个是传递地址,直接操纵地址中的元素

一个是传递值,相当于把主程序的变量赋值给函数的变量

由此可见,二者是有根本性的区别

c++ 参数传递有传值,传地址, 传引用 3种, 除了传值外,其他都有机会改变参数的来源。

数组名 相当于 数组首地址, 所以也是属于要改的。
比如:

void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}

是传值, a ,b 本身来源数不会改变。

而:

void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}

void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}

则是传引用和传地址,会改

什么叫实参?什么叫型参?什么叫按值传递?什么叫按地址传递?
数组什么时候是按值传递的,什么时候按地址传递的?
我就说一个数组,引用数组名其实是引用该数组的地址,如数组A=A[0]或A=A.
但如果是A=A[5],就是指A数组的第六个值了,而不是地址了.