C ++, как бы я инициализировать массив указатель, который выглядит следующим образом? - PullRequest
0 голосов
/ 07 февраля 2020

Начинаю изучать 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_;

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Ниже приведен фрагмент использования указателей,

Car  obj;
Car *p_Obj = &obj;
Car **pp_Obj = &p_obj;
  1. obj - простой объект, в котором хранится содержимое.
  2. p_Obj - указатель, указывающий на область памяти obj
  3. pp_Obj - указатель на указатель на obj

Короче говоря,

enter image description here

Теперь перейдем к вашему случаю,

Car cars1_[numCars];
Car * cars2_;
Car * cars3_[numCars];
Car ** cars4_;
  1. cars1 - массив объектов. Как вы указали, к отдельному объекту можно получить доступ как cars1_[0].fun()

enter image description here

cars2_ - указатель на объект или массив объектов. назначается или обновляется, как указано ниже,
Car cars1_;
Car * cars2_ = &cars1_;
cars2_ -> fun();
//    or
Car cars1_[numCars];
Car * cars2_ = cars1_;
cars2_[0].fun();

enter image description here

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]

enter image description here

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]

enter image description here

0 голосов
/ 07 февраля 2020

Попробуйте,

#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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...