我在头文件中有这个声明
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/