2013-11-24 2 views
0

У меня есть вопрос о параметрах, приведенных к следующему конструктору:Параметры метода

// Codesnippet 1 
Foam::argList::argList 
372 (
373  int& argc, 
374  char**& argv, 
375  bool checkArgs, 
376  bool checkOpts 
377 ) 
. 
. 
. 
  1. Что делает & значит?

  2. Что означает char**&? На самом деле у меня есть код

    //codesnippet 2 
    Foam::argList args(argc, argv); 
    

где ARGV является адресом аргументов командной строки, приведенных к основной методе

// Codesnippet 3 
    int main(int argc, char *argv[]) 

Поэтому я не понимаю, почему передаваемый параметр в codesnippet 1 описывается как char**&.

+2

Сделайте шаг назад и получите хорошее руководство по C++. – StoryTeller

ответ

1

char**& следует читать справа налево. &, в этом контексте означает ссылку. * означает указатель. Поэтому это следует считать ссылкой на указатель на указатель char. Строки - это массивы символов, а в C и некоторых C++ - набираются как char*. Поэтому вы можете упростить сказанное выше, чтобы сказать, что char**& является ссылкой на указатель на строку. Если вы увеличиваете этот указатель, вы получите следующую строку в массиве строк, а массив содержит argc элементов.

char *argv[] - массив указателей на символ. Это еще один способ сказать, что это массив строк, хотя использование [] делает его более ясным, что на самом деле это массив.

Таким образом, вы можете неявно лить от char *argv[] до char** argv. На практике это одно и то же.

Что касается ссылок (&), стоит прочитать соответствующий учебник по ним в другом месте.

Смежные вопросы