您的位置:首页 > 其它

指针和引用

2015-07-22 14:46 197 查看
举例:

test(int number1, int &number2){

第一个参数: 是普通的指针

第二个参数: 是一个指向指针的引用.


调用时,第一个参数传递参数地址就行,而第二个参数则需要传递一个指针变量给它

调用方法:

[code]int num1 = 123;
int *num2 = 2342;
test(&num1, num2);


指向指针的引用是某一指针的别名,同变量的引用一样。引用绝对不是单独存在的,它一定是指示某个已经存在的东西的,它一定是某个已经存在的物体的”别名”.

如果被初始化赋值成某个变量后,它就始终是这个变量的替身.对引用的改变就是对这个变量的改变.


(1)指向指针的引用,不仅改变了指针所指的对象,也改变了指针本身。

代码举例: 文件后缀是.cpp如果是.c 编译通不过

[code]#include<stdio.h>

//引用
void quote(){
    int a= 1;
    int b = 2;
    int *temp = &a;
    int *&p = temp;
    p = &b;
    *p = 5;
    printf("\n 引用 \n a is: %d \n b is: %d \n *temp is: %d\n *p is: %d\n", a, b, *temp, *p);
} 

//指针
void pointer(){
    int a= 1;
    int b = 2;
    int *temp = &a;
    int *p = temp;
    p = &b;
    *p = 5;
    printf("\n 指针 \n a is: %d \n b is: %d \n *temp is: %d\n *p is: %d\n", a, b, *temp, *p);
}

int main(void){ 
    pointer();
    quote();
    return 0;
}


结果:






(2)指向指针的引用,可以实现对传递给形参的实参数值的交换。即指向指针的引用可以修改指针的值,在参数传递时是传址。

举例:

[code]#include<iostream>  
using namespace std;  

void ptrswap2(int *&v1,int *&v2)//指向指针的引用是某一指针的别名,同变量的引用一样,可以实现对传递给形参的实参数值的交换  
{  
    int *temp=v2;//指针别名,当然以指针的形式来应用  
    v2=v1;  
    v1=temp;  
}  

void ptrswap1(int *v1,int *v2)//利用指针进行数值交换,改变的只是形参的指向,实参的值保持不变;  
{  
    int *temp=v1;  
    v2=v1;  
    v1=v2;  
}  

int main(){  

int i=10;  
int j=20;  
int *pi=&i;  
int *pj=&j;  

cout<<"before swap using pointer as parameter: pi="<<*pi<<" pj="<<*pj<<endl;  
ptrswap1(pi,pj);  

cout<<"after swap using pointer as parameter, the value that pointer points to don't change"<<endl<<":: pi="<<*pi<<" pj="<<*pj<<endl;  

int i2=10;  
int j2=20;  
int *pi2=&i2;  
int *pj2=&j2;  

cout<<"before swap using Reference of pointer as parameter:: pi2="<<*pi2<<" pj2="<<*pj2<<endl;  

ptrswap2(pi2,pj2);  

cout<<"after swap, the value that pointer points to  changed: pi2="<<*pi2<<" pj2="<<*pj2<<endl;  

return 0;  
}


结果:



原文: /article/2145608.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: