2016-05-18 3 views
-4

Может кто-нибудь объяснить мне, что такое ** после Cat? Если это указатель на указатель, не должно быть пробела?Что означает «Тип ** переменная»?

Cat fetch_and_kill_oldest(Cat** cat_array, int length){ 
    //This function tries to find the oldest cat, take away one life, 
     Cat temp = cat_array[0]; 
     for(int i = 1; i < length; i++){ 
      if (cat_array[i].age > temp.age){ 
       temp = cat_array[i]; 
      } 
     } 
     temp.lives -= 1; 
     return temp; 
     //stop here 
    } 
+0

В 'Cat **' это означает, что у автора плохой вкус. –

+0

«Если это указатель на указатель, не должно быть места?»: Не нужно места. '**' не является токеном, так что парсер распознает его как два отдельных '*' токена. –

+0

Это не дубликат предлагаемого вопроса. OP знает, для чего работает оператор '**', он просто не понимает, что это означает, когда между ним и типом нет пробела. – dbush

ответ

4

Это:

Cat** cat_array 

То же самое, как это:

Cat **cat_array 

Последнее является предпочтительным, поскольку это более ясно, что указатели см. Например, если у вас заявление, как это:

int* a, b; 

На первый взгляд может показаться, что a и b являются указателями, когда на самом деле только a является указателем. Форматируя его следующим образом:

int *a, b; 
Смежные вопросы