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和ptr_myIntegerClass都是指针.但是以下怎么可能是正确的:
myArr[i] = *ptr_myIntegerClass;
Run Code Online (Sandbox Code Playgroud)据我所知 - *提前指针意味着你取消引用指针?对?那么myArr这是一个指针存储这个解除引用的值怎么样?或者我错了,这myArr是一个指针?但是为什么*在头文件中用a声明?
星号和方括号都会降低取消引用的级别.实际上,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),左侧是可分配的(即左值).