对C++的指针和引用进行了一个对比实验
// 指针和取址.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
using namespace std;
void Add1(int* i)//传入的是一个指针,i的值是一个地址
{
cout << ++i << endl;//地址加1,外部实参不改变
}
void Add2(int& i)//传入的是一个引用变量,
{
cout << ++i << endl;//值
}
void Add3(int*& i)//传入的参数是一个指针,但是在式子中对这个指针进行了引用
{
cout << ++i << endl;//所以外部实参会跟着改变
}
void Add4(int* i)
{
cout << i << endl;
(*i)++;//指针指向的值加一,外部实参会跟着改变
}
int main()
{
int a = 124;
//&a表示a在内存中的地址。取址操作符
cout << "a: " << a << endl << "a's address:" << &a << endl;
//定义一个p指针,指向a所在的地址,将a的地址赋值给p
int* p = &a;
cout << "p: " << p << endl;
//声明p之后,在p之前添加*表示p指向的内存存储的值
cout << "*p's value: " << *p << endl;
//同时p也是一个指针变量,p在内存中也有一个地址存储他,
cout << "p's address: " << &p << endl;
//*&p &p是一个内存地址,*&p表示&p指向地址内存空间的值,这里是a的地址
cout << "*&p: " << *&p << endl;
//**&p 就是a的值
cout << "**&p" << **&p << endl;
Add1(&a);
cout << "形参为*i,实参为&a,为a的地址直接加1: " << a << endl;
Add2(a);
cout << "形参为&i,实参为a,直接加1:" << a << endl;
Add3(p);
cout << "形参为*&i,实参为a的指针p,必须是一个变量不能取址,直接加1:" << a << endl;
cout << "p:" << p << endl;//发现p指针存储的已经不是a的地址了,如果下面再用*p程序将可能出错
Add4(&a);
cout << "形参为*i,实参为a的dihi,地址指向加1:" << a << endl;
}
实验结果截图如上。