提问者:小点点

在C++中理解指针存在问题


我目前在QT工作,最近我注意到一些让我真正困惑的事情。据我所知,通常情况下,当我们想要创建指针时,我们必须使用C++中的以下语法:

int number = 10;
int* pNumber = &number;

(或类似的东西)

我想创建一个指向在QT设计中创建的按钮的指针。这只是为了测试的目的。(我是QT和C++的新手,所以我想测试一下)

但后来我注意到一些奇怪的事情,我无法理解。由于某种原因,当我创建名为“Button”的“opushButton”类型的指针时,我不必在“(*UI).PushButton_5”语法中使用“&”。(pushButton_5是我的ui中我的按钮的名称)

代码工作了,文本“5”被添加到我的qt中的“lineedit”中。这是怎么工作的?我是不是漏了点什么?

下面是我的代码:

MainWindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QPushButton* button = (*ui).pushButton_5;
    ui->lineEdit->setText((*button).text());
}

MainWindow::~MainWindow()
{
    delete ui;
}

MainWindow.h:

#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

共1个答案

匿名用户

&不是创建指针的方法,而是获取指向您可以访问的特定事物的指针的方法。

如果别人告诉您一个东西在哪里,您就不需要&的帮助来找出。

void g(int* q)
{
    int* p = q; // 'q' is the location of some unknown 'int', and so is `p`.
}

如果您有一个东西并且想知道那个东西在哪里,您需要&

void f()
{
    int x = 5;
    int* p = &x; // The location of 'x'.
    g(&x); // Pass the location of 'x' to 'g'.
}

此外,我们通常编写x->y而不是(*x).y
如果您查看多个间接级别,则此约定很有意义-将x->y->z->w(*(*x).y).z).w进行比较。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|理解|指针)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?