结构体指针的指针使用

在C/C++中,自定义类,结构体等默认都是按值传递的,按值传递在函数中是无法改变参数的值的。

当函数要改变参数的值时,可以用指针传递参数,改变指针所指地址的值。

但是当我们要改变指针所指的地址时要怎么办呢?

这就要用到指针的指针了。例子:

 

#include <iostream>
using namespace std;

typedef 
struct node {
    
int data;
}node;

void change( node **p ) {
    
*= new node();
   (
*p)->data = 1;
}
int main()
{
    node 
*p;
    change( 
&p );
    cout 
<< p->data << endl;
    
return 0;
}

 

在函数中,要给 p 分配内存空间,所以要改变结构体指针 p 的值,如果用 change( node *p ),默认 p 是按引用传递,p 的地址不会改变。

用 change( node **p ) 传递指针的指针,在给参数时用取地址符号 &p 把储存指针的地址传递给函数。在函数中用复引用符号 *p 把储存指针的地址转化为指针。然后就可以改变指针所指的内存地址了。

还有一个要注意的问题是优先级问题。

-> 的优先级高于 * ,如果用没有加括号 *p->data = 1,相当于 *( p->data ) = 1。会编译出错。

所以必须加括号!

 

posted on 2011-07-21 18:14  萧佰刚  阅读(1052)  评论(0编辑  收藏  举报