小谈指针和引用
指针
一、概念
1、“指针”是指地址,是常量,“指针变量”是指取值为地址的变量
变量的指针就是变量的地址。存放变量地址的变量是指针变量。
二、理解
1、i_pointer代表指针变量,而*i_pointer是i_pointer所指向的变量
i=3;
i_pointer=&i;
2、调用函数
swap(int *p1,int *p2)
{int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a;pointer_2=&b;
if(a<b) swap(pointer_1,pointer_2);
printf("\n%d,%d\n",a,b);
}
注意:
1、swap(int *p1,int *p2)
{int *temp;
*temp=*p1; /*此语句有问题,未对temp赋值,即temp的值不可预见*/
*p1=*p2;
*p2=temp;
}
2、swap(int x,int y)/*只是交换了形参的值,实参并没改变,单向值传递性*/
{int temp;
temp=x;
x=y;
y=temp;
}
3、swap(int *p1,int *p2)
{int *p;
p=p1;/*调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值*/
p1=p2;
p2=p;
}
引用
一、概念
1、int a;
int &b=a;
b是a的引用,即b是a的别名
二、理解
1、使变量b具有变量a的地址,相当于b不需要另开辟内存单元,a和b有同一地址;改变时也当然是同步的。
2、这里同样就swap函数讨论:C++的引用型作为函数的形参,弥补了值传递的不足
swap(int &p1,int &p2)/*这里p1、p2相当于交换了值,由于分别是a、b的别名,则a、b也同步跟着改变*/
{int temp;
temp=p1;
p1=p2;
p2=temp;
}
main()
{
int a,b;
scanf("%d,%d",&a,&b);
if(a<b) swap(a,b);
printf("\n%d,%d\n",a,b);
}