zoukankan      html  css  js  c++  java
  • 结构体指针的指针使用(转)

    结构体指针的指针使用

    在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。会编译出错。

    所以必须加括号!

     

  • 相关阅读:
    解决svn Authorization failed错误
    jQuery切换事件
    jQuery学习笔记
    EAS开发
    JavaScript第二课
    JavaScript学习第一课
    EAS常用工具类
    [转]OpenBLAS项目与矩阵乘法优化
    [转]mmap和madvise的使用
    [转]C++赋值运算符重载函数(operator=)
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/2113139.html
Copyright © 2011-2022 走看看