#include<iostream> using namespace std; int a = 3; int M = 5; /*使用一级指针 不能修改 指针的指向 void changePointer(int* p) { p = &M ; }*/ void changePointer(int** p) { cout<<"p的地址是:"<<&p<<endl; cout<<"p指向的地址是:"<<&(*p)<<endl; *p = &M; //运行完毕 p的地址不变 cout<<"修改后p指向的地址是:"<<&(*p)<<endl; } void main() { int *b = &a; int **c = &b; cout<<"a的地址为:"<<&a<<endl; cout<<"M的地址为:"<<&M<<endl; cout<<"b指向的地址为:"<<&(*b)<<endl; cout<<"b的地址为:"<<&b<<endl; cout<<"c指向的地址为:"<<&(*c)<<endl; cout<<"c的地址为:"<<&c<<endl; cout<<"c指向的地址b指向的地址为:"<<&(**c)<<endl; //怎么通过c 来修改 a的值呢? changePointer(&b); //只是改变了函数体内部p的指向地址 cout<<"修改后b指向的地址为:"<<&(*b)<<endl; }
指针的指向图,左上角为变量的地址,c,b为指针,其中存放的是指向的地址。
总结:
如果要在函数内部修改一个变量的值,那么要用指向这个变量的指针来修改, 如果要修改在函数内部修改一个指针的指向,那么要用更高一级的指针来修改它。 只定义了一级指针,那么只需要把一级指针的地址传递进去就可以了。 changePointer(&b); b为一级指针,&b就是传入了该指针的地址,那么再定义int**p = &b 就是定义了一个二级指针指向这个位置。