2015-08-28 6 views
1

мне было интересно, когда вы объявляете переменную в цикле он имеет в течение этого цикла и тот же адрес в памяти? Почему это происходит? После цикла, если я объявляю его снова, у него есть другой адрес памяти.декларирование переменных в цикле

Если он имеет тот же адрес, как я могу сделать что-то вроде этого

`char *p[100] 
    cin>>n; 
    for(i=0;i<n;++i) 
     {char b[100]; 
     cin>>b; 
     p[i]=b; 
     }` 

В конце концов, когда я хочу, чтобы отобразить значение р [I], но б имеет тот же адрес, и я в конечном итоге тот же адрес в p [i]. Как это можно сделать без динамического распределения памяти? Это можно сделать так?

ответ

1

Если вы объявляете переменную внутри цикла его память выделяется только один раз, его значение может изменяться в течение цикла, но не решает то почему он будет показывать ту же память. , если вы объявите его снова после цикла, тогда эта переменная не входит в область цикла, переменная в C имеет область блока. Затем он рассматривается как новая переменная, и для него выделяется новая память.

Подробнее о переменном объеме. http://www.geeksforgeeks.org/scope-rules-in-c/

+0

и почему память остается тем же самым в цикле? Это является оптимизация компилятор или обычно поведение? Компилятор не декларирует его каждый раз, когда он проходит через эту декларацию? Почему он декларируется в одном и том же месте? –

+0

Он разработан так, потому что он не нужен. вы можете себе представить, насколько это было бы неэффективно, если бы он выделял 1000-кратную память для одной переменной в цикле. – logonmanish

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