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

    所以必须加括号!

     

  • 相关阅读:
    react 中文文档案例三 (开关按钮)
    react 中文文档案例二 (头像时间)
    react 中文文档案例一 (倒计时)
    韩昊 20190905-2 博客作业
    韩昊 20190905-3 命令行和控制台编程
    bug的状态
    冒泡排序
    python简单实现自动化
    如何写好测试用例——慕课网
    快速搭建springboot项目
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/2113139.html
Copyright © 2011-2022 走看看