2015-06-04 5 views
-6
//Increment and decrement operators: 
    char *s = "iLoveC"; 
    int j = 0; 
    s[j++]; // => "i". Returns the j-th item of s THEN increments value of j. 
    j = 0; 
    s[++j]; // => "L". Increments value of j THEN returns j-th value of s. 
    // same with j-- and --j 

Некоторые вопросы по этому поводу:Почему целое `j` возвращает` i`?

  • Что стоит * на s для?
  • Почему j возвращает i вместо 0, на 4-й строке?
  • Почему j возвращает l вместо 1, на 6-й строке?

Это происходит из простого учебника для начинающих (http://learnxinyminutes.com/docs/c/), и я даже не мог его понять. Мой фон - PHP/Javascript/Lisp.

+1

Зачем спрашивать, когда вы можете Google или читать книгу? –

+0

Спасибо за ваш ответ. Но вы говорите мне, что я google на выходе из [j ++], пока я пытаюсь это понять. И это даже из простого учебника: http://learnxinyminutes.com/docs/c/ Если я не могу понять простой учебник, как я его когда-либо получаю? Отсюда мой вопрос. – ReneFroger

+0

Вы задаете неправильные вопросы. Ваши вопросы должны быть «что делает * на типе в C? Что делает ++ j?» И т. Д. Большинство этих вопросов можно найти здесь, в формате SO. Но в основном вы хотите прочитать информацию об указателе арифметики – fotanus

ответ

1

Оператор * объявляет s как указатель. Это означает, что он будет содержать адрес назначенной переменной. Здесь значение указателя s является i i.e, первым элементом строки «iLoveC». Когда вы используете post increment s [j ++], он эквивалентен s [0] = 'i', но при использовании s [++ j] он эквивалентен s [1] = 'L'

См. Эту ссылку http://www.programiz.com/c-programming/c-pointers-arrays и начать с чтения некоторых книг.

+0

Спасибо, никогда не понимал, что символы строки «iLoveC» использовались в массиве для доступа к ней. – ReneFroger

+0

добро пожаловать. –

1

В C существует много перекрытий между указателями и массивами. Линия

char *s = "iLoveC"; 

может в данном случае рассматриваться как если бы это был массив значений char, подобно

char s[7] = {'i', 'L', 'o', 'v', 'e', 'C', '\0'}; 

. В этом случае, s[0] является характер 'i' и т.д.

s[j++] использует оператор пост-приращение на j, так что, когда j начинается с величиной 0, то есть значение, используемое для индексации массива перед j увеличивается до 1; выражение такое же, как s[j]; j++.

s[++j] использование предварительно Приращение оператор на j, где переменная увеличивается перед тем он используется для индексации массива; выражение такое же, как ++j; s[j]

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