c++ - 指针和解除引用的指针

标签 c++ arrays pointers

我在头文件中有这个声明

private:
MyIntegerClass *myArr;
MyIntegerClass myIntegerClass;
MyIntegerClass *ptr_myIntegerClass = &myIntegerClass;

MyIntegerClass 是一个类,它有一个保存整数的数据成员。它有两个成员函数 - 访问器和修改器。

这是 Array 类的 cpp 文件 - 为数组分配内存、用值填充数组并最后打印数组的类

Array::Array() {

    myArr = new MyIntegerClass[10];
    for (int i = 0; i < 10; i++) {
           ptr_myIntegerClass->setNumber(i);
           myArr[i] = *ptr_myIntegerClass;
    }
}

Array::~Array() { }

void Array::printArray() {
    for (int i = 0; i < 10; i++) {
        cout << myArr[i].getNumber() << endl;
}

我是 C++ 的新手,我对 C 有一定的透彻了解,并且通过反复试验使这个程序可以无误地编译和打印这些值。但是有几件事我不明白:

  • myArr 和 ptr_myIntegerClass 都是指针。但以下怎么可能是正确的:

      myArr[i] = *ptr_myIntegerClass;
    

据我所知 - 将 * 放在指针之前意味着取消引用指针? 正确的?那么作为指针的 myArr 如何存储这个取消引用的值呢? 还是我错了 myArr 是一个指针?但是为什么在头文件中用*声明呢?

最佳答案

星号和方括号都降低了取消引用的级别。实际上,myArr[i]等价于*(myArr+i)*ptr_myIntergerClass等价于ptr_myIntergerClass[0 ]。因此,您的作业等同于

*(myArr+i) = *ptr_myIntergerClass;

myArr[i] = ptr_myIntergerClass[0];

它们都是有效的,因为它们的两边都具有相同的类型(即 MyIntergerClass)并且左侧是可分配的(即 lvalue )。

关于c++ - 指针和解除引用的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614042/

相关文章:

javascript - 从数组生成 strip 索引 block

c - 为什么C中的这个简单程序崩溃(数组VS指针)

计算 n 个整数的最小值

C++:使用用户定义的哈希/相等性帮助创建 unordered_map

c++ - 绝对致命的 wxWidgets 痛苦

C++ 使用 boost 对字符串进行标记并将标记保存为字符串

javascript - 如何在vue实异常(exception)部处理一个数组,并将处理后的数据赋值给vue实例内部的一个(当前为空)数组?

c - MPI_Reduce 是否需要接收缓冲区的现有指针?

c - 当我将它作为指向通过 C 中另一个函数的函数的指针的引用传递时,兼容的指针类型是什么?

c++ - SIMD 延迟吞吐量