当前位置: 首页 > 知识库问答 >
问题:

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

姜德容
2023-03-14

我目前在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个答案

戚翼
2023-03-14

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

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

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进行比较。

 类似资料:
  • 指针不是存放首地址吗,怎么不一样呢

  • 本文向大家介绍举例理解C语言二维数组的指针指向问题,包括了举例理解C语言二维数组的指针指向问题的使用技巧和注意事项,需要的朋友参考一下    之前对数组的概念一直没有理解透彻,只觉得数组名就是个常量指针而已,用法和基本的指针差不多。所以当我尝试用二级指针去访问二维数组时,就经常会出错。下面就是刚开始写的一个错误的程序: 开始的时候我是这样分析的:本来数组和指针就差不多,一维数组和一维指针对应,那么

  • 我需要移动我的鼠标指针。我用的是硒和c。 MoveByOffset和MoveToElement都在执行右键单击,但鼠标指针没有移动。

  • 我有关于如何修改指针的问题,使用类类型元素的对象的前一个和下一个实例变量。双向链表由具有lastName、firstName、phoneNumber、前一个和下一个实例变量的Element对象填充。RemveElement方法接受lastName作为参数,并找到具有该确切String的元素,然后将其从列表中删除。然而,当修改应该从列表中删除元素的指针时,我遇到了一个异常。具体来说,在这段代码中:

  • 问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p

  • 本文向大家介绍请你理解的c++中的引用和指针?相关面试题,主要包含被问及请你理解的c++中的引用和指针?时的应答技巧和注意事项,需要的朋友参考一下 定义: 1、引用: C++是C语言的继承,它可进行过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。引用就是C++对C语言的重要扩充。引用就是某一变量的一个别名,对引用的操作与对变量直