gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:41:38 24 4
gpt4 key购买 nike

我在头文件中有这个声明

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com