int a = 1;
int* p1 = &a;
int** p2 = &p1;
int* &p3 = p1;
指针(p1):指针是存储地址的一种变量,也称指针变量;
指针所指向的值(a):指针变量所存储的地址,一般指向某个特定类型(int)的值;
指针的指针(p2):指针自身也存储在内存中的某个地址,所以指针也可以指向指针;
指针的引用(p3):即指针的别名,修改它,也就是修改原指针(本质上它是指针的指针);
#include<bits/stdc++.h>
using namespace std;
void swap1(int* p1,int* p2){
int* tem = p1;
p1 = p2;
p2 = tem;
}
void swap2(int* &p1,int* &p2){
int* tem = p1;
p1 = p2;
p2 = tem;
}
int main(){
int a = 3, b = 4;
int* pa = &a;
int* pb = &b;
cout << *pa << " " << *pb << endl;
//交换不了
swap1(pa, pb);
cout << *pa << " " << *pb << endl;
//可以交换
swap2(pa, pb);
cout << *pa << " " << *pb;
}
指针作为形参,其实是值传递,不能改变指针自身(实参),但可以改变指针所指向的值;
而指针的引用(or 指针的指针)可以作为函数形参来改变指针自身,因为对于指针而言,它是被引用传递到函数的。