1.内存空间角度:指针是分配内存空间的,包含存储指针的地址信息 ,指针也是有类型的,什么类型的指针只能指向什么类型的数据,无论什么类型的指针,大小都是地址总线的位数,比如32位机子,指针的大小就是4个字节。引用不分配内存空间,引用就是原来变量的别名,空间还是原来的空间,比如你的学名叫张三,引用就是你的小名狗蛋,引用只是个别名,只是个名字。
2.可改变性:一个指针可以指向不同的对象,只要类型一致就行,而引用定义的时候已经初始化,且初始化以后不允许再重新绑定对象。
比如:
int a = 0;
int b = 1;
int *p = a;
p = &b;
3.所以引用访问对象是直接访问。指针访问对象是间接访问。
4。如果p是指针,那么*p就是对p指向的数据对象的访问了。但是两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝。这也是c++长处于java的优点,c++可以控制到没用的东西我直接不用,不该开辟空间的我不用开辟,而java等其他语言则不可以。
#include<stdio.h>
void pt(int * pta,int * ptb)
{
int *ptc;
ptc=pta;pta=ptb;ptb=ptc;
printf("zhizhen2:a=%d,b=%d\n",*pta,*ptb);
}
void ref(int &ra,int &rb)
{
int rc;
rc=ra;ra=rb;rb=rc;
}
void main()
{
int a=3;int b=4;
int *pa=&a;int *pb=&b;
pt(pa,pb);
printf("zhizhen: a=%d,b=%d\n",a,b);
printf("zhizhen2:a=%d,b=%d\n",*pa,*pb);
ref(a,b);//传地址
printf("yinyong: a=%d,b=%d\n",a,b);
}