2015-05-26 2 views
-2

Что означает (* var) [n] в C++? В этом коде я знаю, что это относится к получению захваченной строки из регулярных выражений матчей группы я, но я не понимаю, почему это не работает:(* var) [n] Что это означает в C++

*var[n] //edit: oh duh, that would be a multiplication 

что с скобкой? напоминает мне о кастинге, все 3 дает те же результаты:

(char*)filename[0] 
const_cast<char*>(filename.c_str()) 
&filename[0] 

но (символ *) и (* он) имеют звездочку в разных местах.

regex expr("[_-]?([a-gA-G]#?(?:-2|-1|[0-8]))"); 
    int found = 0; 
    for (sregex_iterator it(tagstruct.name.begin(), tagstruct.name.end(), expr), itEnd; it != itEnd; ++it) { 
     if ((*it)[1] != "") { 
      notename = (*it)[1]; 
      if (++found >= search_count) { 
       f = NoteNameToFreq(notename); 
       break; 
      } 
     } 
    } 
+0

'*' предназначен для косвенной связи с помощью переменной указателя. – Barmar

+1

'* var [n]' не совпадает с '(* var) [n]'. Subscript имеет более высокий приоритет, поэтому он эквивалентен '* (var [n])'. – Barmar

+0

'(char *)' - это литье типов. – Barmar

ответ

1

(*var) означает, что var переменная указатель, и он будет косвенная через указатель для доступа к объекту он указывает. Добавление [n] означает, что оно указывает на массив, и тогда он будет обращаться к элементу массива n.

Не путать (*var)[n] с *var[n]. Последний эквивалентен *(var[n]). Это означает, что var представляет собой массив указателей. Он получает n-й элемент массива, а затем обращается к объекту, на который указывает.

(type*) - это литье типа C, оно преобразует значение после этого в указанный тип указателя.

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