C++,我如何将一个数组初始化为一个看起来像这样的指针?

C++, How would I initialize an array to a pointer that looks like this?

开始学习 C++,我在数组指针练习上遇到了问题。 头文件中的数组声明看起来像

Car cars1_[numCars];
Car * cars2_;
Car * cars3_[numCars];
Car ** cars4_;

我想初始化并将这些指针设置为大小为 numCars 的数组,但我需要了解它的语法。

此外,一旦我完成了这些初始化,我该如何调用数组中各个项的方法?

对于第一种情况,我知道我可以做到

Car cars1_[numCars]; //initialize the array
cars1_[0].fun(); //call a function on index 0

但是其他情况呢?

即如何初始化数组并使这些指针指向它们并调用索引上的函数?

Car * cars2_;
Car * cars3_[numCars];
Car ** cars4_;

试试这个,

#include<iostream>
#include<string>

using namespace std;

class car
{
 public:
      int i;
      fun()
      {
          cout<<"In car with value "<<i<<endl;
      }
};

int main()
{
    car cars1[2],cars11;
    car *cars2;
    car *cars3[2];
    car **cars4;

    cars1[0].i=0;
    cars1[1].i=1;
    cars11.i=2;

    cars3[0]=&cars1[0];
    cars3[1]=&cars1[1];
    cars2=&cars11;


    cars3[0]->fun();       //or   (*cars3[0]).fun();
    cars3[1]->fun();       //or   (*cars3[1]).fun();
    cars2->fun();          //or   (*cars2).fun();


    cars4=&cars2;

    (*cars4)->fun();       //or   (*(*cars4)).fun();

    return 0;
}

输出:

In car with value 0
In car with value 1
In car with value 2
In car with value 2

Process returned 0 (0x0)   execution time : 0.232 s
Press any key to continue.

下面是指针用法的片段,

Car  obj;
Car *p_Obj = &obj;
Car **pp_Obj = &p_obj;
  1. obj 是存储内容的简单对象。
  2. p_Obj 是指针,指向 obj
  3. 的内存位置
  4. pp_Obj 是指向 obj
  5. 的指针

简而言之,

现在来处理你的情况,

Car cars1_[numCars];
Car * cars2_;
Car * cars3_[numCars];
Car ** cars4_;
  1. cars1 是对象数组。正如您所指出的,可以通过 cars1_[0].fun()
  2. 访问单个对象

  1. cars2_ 是指向对象或对象数组的指针。分配或更新如下,
Car cars1_;
Car * cars2_ = &cars1_;
cars2_ -> fun();
//    or
Car cars1_[numCars];
Car * cars2_ = cars1_;
cars2_[0].fun();

  1. cars3_ 是指向对象的指针数组或对象数组
Car cars11_{10};
Car cars12_[4]{20,30,40};
Car * cars2_[4] = { &cars11_,&cars12_[0] };

cars2_[0]->fun(); //access cars11_
(cars2_[1]+0)->fun(); //access cars12_[0]
(cars2_[1]+1)->fun(); //access cars12_[1]
(cars2_[1]+2)->fun(); //access cars12_[2]

//or

cars2_[1][0].fun(); //access cars12_[0]
cars2_[1][1].fun(); //access cars12_[1]
cars2_[1][2].fun(); //access cars12_[2]

  1. cars4_是指向对象指针的指针或指向对象指针数组的指针或指向对象数组指针的指针
Car cars11_[4]{10,20,30};
Car *cars12_= &cars11_[0];
Car **cars4_ = &cars12_;

(*cars4_)[0].fun();  //access cars11_[0]
(*cars4_)[1].fun();  //access cars11_[1]
(*cars4_)[2].fun();  //access cars11_[2]

//or

cars4_[0][0].fun();  //access cars11_[0]
cars4_[0][1].fun();  //access cars11_[1]
cars4_[0][2].fun();  //access cars11_[1]