C++指针与C语言的用法一样。
/**
C++引用,指针
*/
#include<iostream>
using namespace std;
int main()
{
int array[]={1,2,3,4,5,6,7,8};
int length=sizeof(array)/sizeof(array[0]);
int *p=array;
while(p<=&array[length-1])//地址之间的比较
{
cout<<*p<<" ";
p++;
}
cout<<endl;
p=array;
for(int i=0;i<length;i++)
{
cout<<*p<<" ";
p++;
}
cout<<endl;
return 0;
}
结果:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
C++引用:
引用是变量的别名,对引用的操作等同于对变量的操作。使用引用可以方便的在函数里面修改函数外面的变量。
/**
C++引用:
C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。
C++ 函数传参:
(1)将变量名作为实参和形参。这时传给形参的是变量的值,传递是单向的。
如果在执行函数期间形参的值发生变化,并不传回给实参。
因为在调用函数时,形参和实参不是同一个存储单元。// 同 c
(2) 传递变量的指针。形参是指针变量,实参是一个变量的地址,
调用函数时,形参(指针变量)指向实参变量单元。
这种通过形参指针可以改变实参的值。// 同 c
(3) C++提供了 传递变量的引用。
形参是引用变量,和实参是一个变量,调用函数时,
形参(引用变量)指向实参变量单元。这种通过形参引用可以改变实参的值。
*/
/*
引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。
一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
引用必须在创建时被初始化。指针可以在任何时间被初始化。
不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名
*/
#include<iostream>
using namespace std;
void swap(int& x,int& y)
{
x^=y;
y^=x;
x^=y;
}
void swap(int *x,int* y)//使用指针来交换
{
*x^=*y;
*y^=*x;
*x^=*y;
}
int main()
{
int a=10,b=9;
cout<<"a="<<a<<" b="<<b<<endl;
swap(a,b);
cout<<"a="<<a<<" b="<<b<<endl;
swap(&a,&b);
cout<<"a="<<a<<" b="<<b<<endl;
// int& r;//错误引用必须在声明的时候初始化
// error: 'r' declared as reference but not initialized|
// int& r1=NULL;//错误,没有空的引用
int& r2=a;
cout<<"r2="<<r2<<endl;
r2=20;//
cout<<"r2="<<r2<<endl;
cout<<"a="<<a<<endl;//对应用的操作就是对变量本身的操作
// 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。
const int& r3=a;
// r3=30;//常引用不能对变量进行修改,达到了应用的安全性。
//error: assignment of read-only reference 'r3'|
cout<<"r3="<<r3<<endl;
return 0;
}
结果:
a=10 b=9
a=9 b=10
a=10 b=9
r2=10
r2=20
a=20
r3=20