指针的经典应用函数
void MySwap(int *x,int *y)
{
int temp=*x;
*x=*y;
*y=temp;
}
主函数
int main()
{
int a=1;
int b=2;
int c=3;
int *x=&a;//指针类型要和变量类型相同
cout<<"&x:"<<&x<<" x:"<<x<<" *x:"<<*x<<endl;
int *y;
y=&a;//变量名为y, *y为数值, *为取内容
cout<<"&y:"<<&y<<" y:"<<y<<" *y:"<<*y<<endl;
输出为
&x:0x6dfed8 x:0x6dfee0 *x:1
&y:0x6dfed4 y:0x6dfee0 *y:1
(此处有图)
由此可以看出:
(1)声明指针的时候会为指针开辟空间
(2)两个指针的地址不同,但是可以指向同一个地址区域
(3)x=&a 可以象征性的看作普通变量把其地址赋给了指针变量
为了研究值传递,将上个代码块的 y=&a 转换为 y=&b,之后带入函数MySwap
MySwap(x,y);
cout<<"MySwap:"<<endl;
cout<<"&x:"<<&x<<" x:"<<x<<" *x:"<<*x<<endl;
cout<<"&y"<<&y<<" y:"<<y<<" *y:"<<*y<<endl;
cout<<"&a:"<<&a<<" a:"<<a<<endl;
cout<<"&b:"<<&b<<" b:"<<b<<endl;
输出结果为
MySwap:
&x:0x6dfed8 x:0x6dfee0 *x:2
&y0x6dfed4 y:0x6dfedc *y:1
&a:0x6dfee0 a:2
&b:0x6dfedc b:1
(此处有图)
由此可知
(1)a,b值的改动是通过地址而操纵的。类似对于数组int a[N]来说,若有函数Meow(int a[]);其中有改变数组a中数据的操作 ,函数执行结束之后,对数组的改变依然存在。因为main()函数中调用语句为Meow(a); 由数组的存储方式可知,此处的a为首地址。
MySwap(&a,&b);
cout<<"MySwap:"<<endl;
cout<<"&x:"<<&x<<" x:"<<x<<" *x:"<<*x<<endl;
cout<<"&y"<<&y<<" y:"<<y<<" *y:"<<*y<<endl;
cout<<"&a:"<<&a<<" a:"<<a<<endl;
cout<<"&b:"<<&b<<" b:"<<b<<endl;
输出结果为
MySwap:
&x:0x6dfed8 x:0x6dfee0 *x:1
&y0x6dfed4 y:0x6dfedc *y:2
&a:0x6dfee0 a:1
&b:0x6dfedc b:2
由此可知:
(1)再次得知,x=&a 可以象征性的看作普通变量把其地址&a赋给了指针变量x