int main(){ int* a = 71; a = a + 1; printf("%d\n", a); }
Да, программа работает и выводит 75. Компилятор дает предупреждение: warning: initialization makes pointer from integer without a cast [enabled by default] int* a = 71; ^ В языке С инициализация указателя из целого числа без явного приведения вызывает сообщение о предупреждении. Его можно обойти, записав int* a = (int*) 71;
Само значение 75 объясняется просто: указатель, имеющий значение 71, при добавлении 1 наращивается не на 1, а на 1, умноженную на длину указателя (4 байта для integer), поскольку именно так реализуется арифметика указателей. 71+4=75.
sergeylive
27.06.2020
Компьютер, или электронно-вычислительная машина, в нашей жизни занимает все большее место. С его можно напечатать текст или произвести математические вычисления, составить расписание движения поездов и управлять технологическим процессом на заводе, изучать иностранные языки и руководить полетом космической станции, вести бухгалтерские расчеты и планировать бюджет страны, общаться с людьми, находящимися в любой точке земного шара, и вести тончайшие хирургические операции, послать письмо другу и сделать фотографию. Я могла бы еще долго перечислять возможности современных компьютеров. Но и из этого перечня ясно, что развитие современных технологий, управление экономикой и производством, образование и медицина, наука и космос сегодня немыслимы без компьютера.
int main(){
int* a = 71;
a = a + 1;
printf("%d\n", a);
}
Да, программа работает и выводит 75.
Компилятор дает предупреждение: warning: initialization makes pointer from integer without a cast [enabled by default]
int* a = 71;
^
В языке С инициализация указателя из целого числа без явного приведения вызывает сообщение о предупреждении.
Его можно обойти, записав int* a = (int*) 71;
Само значение 75 объясняется просто: указатель, имеющий значение 71, при добавлении 1 наращивается не на 1, а на 1, умноженную на длину указателя (4 байта для integer), поскольку именно так реализуется арифметика указателей. 71+4=75.