C/C++

СРОЧНО. Решить на языке С++

Проанализируйте распределение памяти и определите результат работы приведенного фрагмента программы (если данные располагаются, начиная с адреса 1000).

int *P=&A;
float C=0.5, *G=&C;
int A=1, B=12;
printf(“%u %d %f\n”, G, *(&A), *G);
Начнём с того, что этот код не скомпилируется. От слова "совсем". В строке int *P=&A; переменной A ещё не существует и компилятор выдаст ошибку. Если же менять местами определения переменных, то и их адреса в памяти поменяются.

Во вторых, компилятор сам решает, в какой последовательности переменные будут размещаться в памяти. И разные компиляторы даже на одной архитектуре могут дать разные результаты.

В третьих, в разных системах команд и разных компиляторах указатели и переменные типа int имеют разный размер. И выводимые на экран значения для 32-битного и 64-битного экзешников на одном и том же PC будут совершенно разными.

В четвёртых, автоматические переменные при каждом вызове подпрограммы размещаются - в общем случае - в разных адресах памяти. Утверждать, что автоматические данные располагаются с адреса 1000 - невежество, впариваемое под видом обучения.
МШ
Мастер Шифу
76 708
Лучший ответ
А зачем ты вообще пошел на программирование, если учиться не хочешь? Думаешь на работе тоже кто-то за тебя будет программы писать? Скажи маме, что хочешь быть таксистом или дальнобойщиком и бросай эту пустую трату родительских денег.
Правильное объявление переменных выглядит так:
float C=0.5, *G=&C;
int A=1, B=12;
int *P=&A;

Компилятор выделит память по своему усмотрению, не обязательно в строгом порядке объявления переменных.
Например, в ОС Андроид указатель *P будет иметь наименьший адрес, переменная C - наибольший адрес, остальные переменные - как угодно компилятору.