引用
引用为对象起了另一个名字,并且引用是将引用与初始值对象绑定在一起直到程序结束,无法重新绑定引用,所以引用一定要进行初始化。引用通过声明符&d来表示,其中d是声明的变量名。
简单理解引用,就是给一个对象起另一个名字,操作的时候操作的是一个对象,与类型别名不同,引用主要用在函数传参的时候,在一些情况下,函数传参的时候想要改变传入的参数就可以利用引用来实现。
int ival = 1024;
int &refval = ival;
函数传参使用引用的简单例子:交换两个变量的值。
#include<iostream>
using namespace std;
没有用引用传参,没有改变参数本身
void exchange1(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
利用引用传参,改变了参数本身
void exchange2(int& a, int& b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int a = 1, b = 2;
exchange1(a, b);
cout << "a = " << a << " b = " << b << endl;
exchange2(a, b);
cout << "a = " << a << " b = " << b << endl;
system("pause");
return 0;
}
指针
指针耳熟能详,只要是学过各种编程语言就能知道指针这个重要的东西。
本人对指针的理解,就是定义一个指针,这个指针里存入的地址,在计算机中所有内容都存在所对应的地址中,指针就指向了该地址,对指针解引用也就在这个地址中拿出了所存的内容。我们想去某个地方买某新东西,指针就是指向这个东西所在的地点,我们就会到这个地点买我们需要的东西。
c++在使用指针时一定要知道&符是取址符。与引用类似,指针实现了对其他对象的直接访问,但他与引用有很多不同点。其一,真真本身就是一个对象,允许指针赋值和拷贝,而且指针可以指向不同的对象。其二指针不用在定义时就进行初始化,和其他内置类型一样不进行初始化就会有个默认值。
int* p;
int a = 10;
p = &a;
cout << p << " " << *p << endl;
通过输出,我们可以看出,p中存入的时a的地址,*p解引用是p地址中的值。
下面也用指针写交换两个变量值的函数
#include<iostream>
using namespace std;
void exchange(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 1;
int b = 2;
exchange(&a, &b);
cout << "a = " << a << "," << "b = " << b << endl;
system("pause");
return 0;
}
指向指针的指针
简单理解就是指针中的内容存入的是变量的地址,而指针也有自己的地址,所以指针也可以指向指针。
int ival = 1023;
int *p = &ival; p指向一个int型的数
int *pp = &p; pp指向一个int型指针