цикл инициализируется с тремя переменными - PullRequest
0 голосов
/ 08 марта 2019

У меня есть сомнения, почему 3 переменные wstart = wend = start;используются для инициализации цикла. Если значение любого из этих изменений переменной изменит значение обеих переменных ???

void reverseletter(char str[], int start, int end) {               
    int wstart, wend; 
    for (wstart = wend = start; wend < end; wend++) { 

        if (str[wend] == ' ') 
            continue; 

        // Checking the number of words 
        // present in string to reverse 
        while (str[wend] != ' ' && wend <= end) 
            wend++; 
        wend--; 

        //Reverse the letter 
        //of the words 
        reverse(str, wstart, wend); 
    } 
} 

Ответы [ 4 ]

3 голосов
/ 08 марта 2019

wstart = wend = start совпадает с

wend = start;
wstart = start;

, если значение какой-либо из этих переменных изменится, изменится ли значение обеих переменных?

Нетизменение одной переменной не повлияет на остальные, все 3 являются независимыми переменными.

1 голос
/ 08 марта 2019

Назначение, подобное b = c, само является выражением, значение которого равно значению b после назначения.

Поэтому

a = b = c;

можно увидеть как

a = (b = c);

, что эквивалентно:

b = c;
a = b;

Все три переменные a, b и c остаются полностью независимыми друг от друга.

Вы можете продемонстрировать это с помощью следующего фрагмента:

int a = 1;
int b = 2;
printf("%d\n", a);
printf("%d\n", a = b);
printf("%d\n", a);

выход

1
2
2
0 голосов
/ 08 марта 2019

Этот фрагмент

wstart = wend = start

использует тот факт, что в C присваивание является выражением, которое возвращает значение.В результате wend = start присваивает значение start wend и «возвращает» его.Это «возвращаемое» значение присваивается wstart.Таким образом, общий эффект заключается в назначении start для wend и wstart.

Это стиль, который я видел раньше, но лично мне он не нравится.Я бы предпочел:

for (wstart = start, wend = start; wend < end; wend++)

, который делает то же самое, но в более ясной форме, ИМО.

0 голосов
/ 08 марта 2019

Если вы измените одну из переменных, она не изменит другую. Все они не ссылаются на одну и ту же область памяти.

int wstart, wend; 
for (wstart = wend = start; wend < end; wend++) { 

wstart, wend и start, у каждого будет своя копия значений, а изменение одного не изменит других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...