一级指针和二级指针在做形参时的不同:指针用作形参,改变指针地址则值不能传回,改变指针内容而地址不变则值可以传回。
(特殊情况:改变指针地址采用返回值也可以传回地址)
对于一级指针,做形参时传入地址,如果函数只改变该指针内容,OK,该指针可以正常返回,
如果函数改变了指针地址,除非返回该指针,否则该指针不能正常返回,函数内对指针的操作将无效。
对于二级指针,做形参时传入地址(注意此时传入的是二级指针的地址),如果改变该二级指针地址(**p),
对该指针的操作也将无效,但是改变二级指针的内容(例如*p),则该二级指针可以正常返回。
总之,指针使用最关键的是弄清地址和内容,指针做形参时只有改变其内容时才能正常返回。
- void fun(int *q)
- {
- int b = 100;
- q = &b;
- }
- void fun(int *q)
- {
- int b = 100;
- *q = b;
- }
- void fun(int **q)
- {
- int b = 100;
- *q = &b;
- }
- void fun(int **q)
- {
- int b = 100;
- **q = b;
- }
- void fun(int **q)
- {
- int *b = new int;
- *b = 100;
- q = &b;
- delete b;
- }
void fun(int *q)
{
int b = 100;
q = &b;
}
void fun(int *q)
{
int b = 100;
*q = b;
}
void fun(int **q)
{
int b = 100;
*q = &b;
}
void fun(int **q)
{
int b = 100;
**q = b;
}
void fun(int **q)
{
int *b = new int;
*b = 100;
q = &b;
delete b;
}
小测验,看看哪些会改变 q的值。
- int x = 10;
- fun(x);
- //fun(&x);
- printf("%d\n",x);