语句序列
1. 传值调用
这种调用方式实际只是将原本的实参值拷贝一个副本放入被调用函数的栈区中,而在被调用的函数中,形参值可以随意改变,不影响主函数中的实参值。
例如:
#include<bits/stdc++.h>
using namespace std;
viod swap(inta,int b)
{
int t=a;a=b;b=t;
}
int main()
{
int c=1,d=2;
swap(c,d)
cout<<c<<""<<d<<endl;
return 0;
} //最终输出为1 2
这个例子中只是在swap函数中交换了a,b的值,而在main 中却没有交换。
在主函数中,swap函数只是交换了c,d两个变量副本的值,实参却没有交换,并没有达到目的。
2. 传址调用
利用将实参的地址值传递给形参,从而直接让形参指向实参,达到交换的目的
例如:
#include<bits/stdc++.h>
using namespace std;
viod swap(int &a,int &b) //形参是传址调用,&a,&b代表将地址值传递给形参
{
int t=a;a=b;b=t;
}
int main()
{
int c=1,d=2;
swap(c,d)
cout<<c<<""<<d<<endl;
return 0;
} //最终输出为2 1
注:也可用指针变量来解决
1. 指针变量定义及赋值
说明 样例
类型说明符 *指针变量名; int a=10; int *p;
取地址运算符 :& p=&a;
间接运算符 : * *p=20;
指针变量直接存取的是内存地址 cout<<p; 结果不是数值
间接存取才是储存类型的值 cout<<*p; 结果不是数值
其中不允许将数值赋予指针变量,如:int *p; p=10; 是错误的
*(p+i)等同于p[I]
指针用法举例:
#include <bits/stdc++.h>
using namespace std;
void swap(int *,int *);
int main()
{
int a=3,b=4;
cout<<"a="<<a<<"b="<<b<<endl;
swap(&a,&b);
cout<<"a="<<a<<"b="<<b<<endl; //此时a,b的值交换
return 0;
}
void swap(int *x, int *y)
{
int t=*x;
*x=*y;
*y=t;
} //此时x,y所代表的位置交换
#include<algorithm>
using namespace std;
viod mao(int [],int); //相当于 viod mao(int a[],int n);
int main()
{
int b[10]={1,2,3,4,5,6,7,8,9,10}; //大数据组应开为全局变量
cout<<"排序前“;
for(int i=0; i<10; i++)
cout<<b[i]<<',';
cout<<endl;
mao(b,10);
cout<<"排序后";
for(int i=0; i<10; i++)
cout<<b[i]<<',';
cout<<endl;
return 0;
}
viod mao(int a[],int n)
{
for(int i=1; i<n; i++)
{
for(int j=0; j<n-i; j++)
if(a[j]>a[j+1]) //判断并交换变量
{
int t=a[j]; a[j]=a[j+1]; a[j+1]=t;
}
}
}