2017-02-07 15 views
0
#include<stdio.h> 
int main(void) 
{ 
     int x,y; 
     x=10; 
     y=x; 
     x=5; 
     printf("x=%d,y=%d\n",x,y); 
     return 0; 
} 

Выход: х = 5, у = 10Имеет ли C понятие изменяемых и неизменных значений переменных, таких как Python?

Так мы можем сказать, что y неизменен?

+0

Значение любой переменной в C может быть изменено, если не объявлено 'const'. – DyZ

ответ

1

За исключением const, все значения переменных изменяемы в C.

Можно ли сказать, что y является неизменным?

Короткий ответ: No.

+0

Статически инициализированные строки неизменяемы. Итак, последнее утверждение неверно. – DyZ

+0

@ DYZ Я снял эту строку. – rsp

+0

@ DYZ-- строковые литералы неизменяемы, но статически инициализированные строки, то есть строки, инициализированные статической продолжительностью хранения, являются изменяемыми. Например, 'char mutable_string [] =" Это может измениться ";' в области файлов изменено. –

0

Мы можем сказать, что y неизменен?

Мы можем, но мы были бы неправы :-)

Вы только должны немного поэкспериментировать, чтобы выяснить это. Простой y = 42 предположить, что y были не неизменны, но есть еще некоторые сомнения в том, что она может быть создана значение нового и указала y в том, что, оставив старое значение нетронутым.

Это может быть дисконтированным с кодом, как:

int y = 7;  // we have a y 
int *pY = &y;  // and a pointer to it 
y = 42;   // change y 
printf ("%d %d\n", y, *pY); 

Вы увидите, что там оба методов, используемых для доступа y получить новое значение, указывающее, что базовое значение самого y изменился, а чем создание нового значения, и y как-то перенаправлено на него.

Это не означает, что C сам по себе не имеет неизменяемые данные, вот что такое ключевое слово const. Однако это совсем не похоже на концепцию неизменности Python.