2013-03-02 3 views
-3

У меня есть эта примерная программа из книги, в этом фрагменте кода есть строка ++frequency[responses[RESPOSE_SIZE]];. Я не могу понять, как мы увеличиваем базовый адрес массива? может быть, я дурак? но все же я не вижу никакой логики там ... пожалуйста, кто-то мне поможет ... спасибо!Невозможно понять часть этого фрагмента?

int main() 
    { 
      int answer, rating; 

      int frequency[FREQUENCY_SIZE] = {5}; 

      int responses[RESPOSE_SIZE] ={1,2,3,4,5,6,7,8,9,10, 

       1,6,3,8,6,10,3,8,2,7,6,5,7,6,8,6,7,5,6,6, 

       5,6,7,5,6,4,8,6,8,10}; 

     for(answer = 0; answer<RESPOSE_SIZE; answer++) 
     { 

      ++frequency[responses[RESPOSE_SIZE]]; 
     } 

     printf("%s%17s\n", "Rating", "Frequency"); 

     for(rating=1; rating<FREQUENCY_SIZE; rating++) 
     { 
      printf("%6d%17d\n", rating, frequency[ rating ]); 

     } 

     return 0; 
    } 
+1

ответы [RESPOSE_SIZE] являются ** выводом ** действительного объема памяти. Этот код кажется фиктивным. – CapelliC

+2

Вы не могли бы придумать менее описательное и менее полезное название. – 2013-03-02 07:31:41

ответ

3

++frequency[responses[RESPOSE_SIZE]] не означает, что базовый адрес массива увеличивается.

Это означает, что изделие в массиве frequency с позиции responses[RESPONSE_SIZE] - прирост. Конструкция responses[RESPONSE_SIZE] является предметом в массиве responses с позиции RESPONSE_SIZE.

+0

Спасибо моему другу, это означает, что он соберет элемент из массива, а затем он увеличит его ... спасибо! – EmbeddedCrazy

0

Оператор индексирования [] имеет более высокий приоритет, чем оператор приращения префикса ++. Таким образом, операция приращения префикса применяется к элементу массива, найденному после индексирования, а не к базовому адресу массива.

+0

Buff, извините, но я понимаю, что ++ (частота [ответы [RESPOSE_SIZE]]) сначала он получит доступ к элементу из массива частот и приращения. Но в этом случае было бы лучше использовать post increment, потому что pre increment ... извините, мой друг ... но немного путайте – EmbeddedCrazy

+0

Для этой конкретной строки post increment будет работать так же хорошо. Так будет 'frequency [response [RESPOSE_SIZE]] + = 1;'. Что касается того, почему человек, который написал код, предпочитал один над другим, вам придется спросить его/ее. Я не понимаю, почему пост-инкремент был бы более (или менее) читаемым, чем предварительный приращение здесь. –

+0

На самом деле - более важным вопросом для автора кода было бы то, что они вообще обращаются к ответам [RESPOSE_SIZE] '. 'RESPOSE_SIZE' является недопустимым индексом для массива' response [] '. Я предполагаю, что, возможно, это будет '++ частота [ответы [ответ]];'? –