Программа:Указатели и распределения памяти в C
int x;
int *y;
int **z;
z = (int **) malloc (sizeof(int *));
y = (int *) malloc (sizeof(int));
x = 1;
*z = &x;
*y = x;
.
.
.
Вопрос: Какова разница между:
*z = &x;
*y = x;
Из того, что я понимаю, * Z указывает на адрес х и * у точек к x, но для * y указывать на x не требуется адрес x? Я не совсем понимаю, что происходит с этими двумя переменными.
Редактировать: Я также хочу знать, когда мы узнаем, когда переменная выделена в стеке или в куче?
- Почему x, y и z выделены в стеке?
- Почему * y, ** y, * z, ** z, выделенные на кучу?
И, наконец, меняется * z, изменение ** z?
«Из того, что я понимаю ...» Вы неправильно поняли. z и y все еще указывают на любой блок памяти, на который они указывали, когда вы их выделили. –
Вы не должны указывать возвращаемое значение 'malloc()' в C. Это поможет идентифицировать ошибку, когда у нее нет прототипа. – jxh
Прежде всего вам нужно понять, что эти последние два утверждения совершенно разные. Первый присваивает * адрес * x любому z, на который указывает точка, а второй присваивает * значение * x для x, к которому указывает y. Если вы присвоите значение, оригинал и копия станут «отключенными», так что изменение одного не изменит другого. Но когда вы используете только адрес, то два соединяются на тазобедренном - меняют одно, а вы меняете другое. –