代码之家  ›  专栏  ›  技术社区  ›  uzay95

我们应该什么时候使用*,&,,->?

  •  0
  • uzay95  · 技术社区  · 14 年前

    但我们不会把它加到 实例?

    #include <QApplication>
    #include <QPushButton>
    
    int main(int argc,char *argv[])
    {
        QApplication app(argc,argv);
        QPushButton *button = new QPushButton("Button Text");
        QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit()));
        button->show();
        return app.exec();
    }
    

    我们什么时候用 * , & , . , ->

    7 回复  |  直到 14 年前
        1
  •  4
  •   Matthew Flaschen    14 年前

    new 返回指针,因此 * 在这里用于将button定义为指向QPushButton的指针 & 用于引用(获取的地址) app connect .

    button->show(); 
    

    相当于:

    (*button).show(); 
    

    这是所有介绍的书中所有的基本C(除了new)和C++。

        2
  •  7
  •   Didier Trosset    14 年前
    • 你应该使用 . 当您想要存取结构变数的成员时。
    • 你应该使用 * 当你想声明一个指向某个东西的指针时(例如一个结构)。
    • & 当你想从一个变量中得到一个指向某个东西的指针时。
    • 你应该使用 -> 当您想从指针访问结构的成员时。
        3
  •  1
  •   Igor Zevaka    14 年前

    操作员 -> 介绍了如何轻松地获得结构体(或C++类中的成员)。取消引用指针的优先级低于计算成员的优先级(点运算符)。考虑以下语法:

    some_struct * pStruct;
    *pStruct.somemember = 5;
    

    *pStruct.somemember = 5; 实际上相当于 *(pStruct.somemember) 它取消了引用 pStruct.somemember ,不是 pStruct .

    所以为了取消引用 首先将其放入括号中,括号中有几个额外字符: (*pStruct).somemember pStruct->somemember 是个速记,看起来干净多了。

        4
  •  1
  •   Kevin Le - Khnle    14 年前

    要引用对象的成员变量或方法,必须使用

    QApplication app(argc,argv);
    return app.exec();
    

    要通过指向对象的指针引用成员变量或方法,必须使用 右箭头运算符->

    QPushButton* button = new QPushButton("Button Text");
    button->show();
    

    若要获取对象的地址(在本例中,当函数需要指向对象的指针时,这是必需的),必须使用

    QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit()));
    

    要获取存储在某个地址的对象的值,必须使用 遵从算子*

    QPushButton* button = new QPushButton("Button Text");
    //*button is the value stored at address button          
    
        5
  •  1
  •   Justin Johnson    14 年前

    * 用于指示在创建对象时C++中的指针。所以呢 QPushButton *button 类型 QPushButton app 是对象本身而不是指针。因此不存在 * 和它一起。如果要通过指针访问对象的属性,可以使用 -> 你还用别的吗 .

        6
  •  0
  •   fredoverflow    14 年前

    QPushButton*按钮=。。。

    button ,而不是 *button QPushButton* button = ... ,但这不适用于单个声明中的多个变量。

    在一份声明中 * 表示声明的变量是指针。在表达式中 意味着取消引用。

        7
  •  0
  •   Nikko    14 年前

    默认情况下,不应使用任何内容,只应使用静态分配:

    QPushButton button;
    QApplication app(argc,argv);
    std::string s;
    int a = 0;
    

    类/结构成员通过 . s.append( "test" )

    当您将其传递给函数时,如果您不需要副本,请使用引用

    void myFunction( std::string & s ){}
    
    myFunction( s );
    

    void myFunction( const std::string & s ) {}
    
    myFunction( s ); // we know s won't be modified
    

    这是你默认使用的基本功能。你看,这很简单。变量超出范围时会自动释放。

    然后是指针。您需要使用指针来动态地允许堆或空闲存储上的内存。

    int * p = new int[4]; // allow 4 doubles on the free store
    

    p是4个int中第一个元素的地址。 *p 是第一个int的值。在我们的示例中,p[1]给出了第二个int的值。通过 -> ). 相当于 (*variable).

    int i = 0;
    

    然后 &i i

    您可能需要具有未限定范围的变量的指针、以地址为参数的函数以及多态性(将子类指针转换为基类指针)

    delete[] p; // allocated with new[]
    delete p2;  // allocated with new
    

    如果您忘记删除内存,这就是内存泄漏的地方。

    这就是为什么“智能指针”发明的地方,这些指针会在没有人需要使用它们的时候自动删除它们的内容。例如,boost::shared\u ptr或者您的编译器支持tr1::shared\u ptr。

    用法如下:

    boost::shared_ptr< int > a( new int( 42 ) );
    

    不需要删除