1.指針與雙指針的內存示意圖
函數內定義如下變量
Int* a=1;
Int** b=2;
a[0x********] --->棧內存地址n(值爲1);
b[0x********] --->*b[0x********] ---->棧內存地址m(值爲2);
2.當基本類型,指針,雙指針作爲函數參數傳入函數
#include<iostream>
using namespace std;
//修改從函數外部傳來的變量的數值
void fun(int* vartype)
{
int w = 111;
*vartype = 111; //只能通過直接修改值的方式修改
cout << "*" << endl;
}
//修改從函數外部傳來的變量的數值
void fun(int **vartype)
{
int w = 222;
*vartype = &w; //通過修改地址方式修改值
//**vartype = 222; //通過直接修改值的方式修改
cout << "**" << endl;
}
//修改從函數外部傳來的變量的數值
void fun(int ***vartype)
{
int w = 333;
**vartype = &w; //通過修改地址方式修改值
//***vartype = 333; //通過直接修改值的方式修改
cout << "***" << endl;
}
void main()
{
int a = 1;
int *b = &a;
int **c = &b;
fun(&a); //函數內改變a的值
cout << "a=" << a << endl;
fun(&b); //函數內改變b的值
cout << "*b=" << *b << endl;
fun(&c); //函數內改變c的值
cout << "**c=" << **c << endl;
system("pause");
}
輸出結果:
*
a=111
**
*b=222
***
**c=333
請按任意鍵繼續. . .
總結:
想要在函數內部改變函數外部傳入的參數的值,需要傳入外部變量的地址