指针和解引用指针

use*_*252 3 c++ arrays pointers

我在头文件中有这个声明

private:
MyIntegerClass *myArr;
MyIntegerClass myIntegerClass;
MyIntegerClass *ptr_myIntegerClass = &myIntegerClass;
Run Code Online (Sandbox Code Playgroud)

MyIntegerClass是一个具有一个包含整数的数据成员的类.它有两个成员函数 - 一个访问器和一个mutator.

这是Array-class的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;
}
Run Code Online (Sandbox Code Playgroud)

我是C++的新手,我对C有一定的了解,并且通过反复试验使得这个程序能够无错误地编译和打印这些值.但有一些我不明白的事情:

据我所知 - *提前指针意味着你取消引用指针?对?那么myArr这是一个指针存储这个解除引用的值怎么样?或者我错了,这myArr是一个指针?但是为什么*在头文件中用a声明?

das*_*ght 5

星号和方括号都会降低取消引用的级别.实际上,myArr[i]相当于*(myArr+i),*ptr_myIntergerClass相当于ptr_myIntergerClass[0].因此,您的任务相当于任何一项

*(myArr+i) = *ptr_myIntergerClass;
Run Code Online (Sandbox Code Playgroud)

要么

myArr[i] = ptr_myIntergerClass[0];
Run Code Online (Sandbox Code Playgroud)

两者都是有效的,因为它们的两侧都具有相同的类型(即MyIntergerClass),左侧是可分配的(即左值).