0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
1

Почему код так работает?

19.02.2015, 18:41. Показов 1081. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!!! не могу понять смысл кода и почему он так себя ведет
C
1
printf("%d", (int*)20 + 56);
это выводит 244, но почему так я не понимаю вообще.... подскажите пожалуйста, почему так код себя ведет.
Всем спасибо за внимание и помощь!!!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2015, 18:41
Ответы с готовыми решениями:

Почему int так работает?
1. Задача: Обычно под переменную типа int отводится 4 байта. Определите (узнайте, вспомните)...

Почему malloc работает не так, как ожидается?
int main() { int* p =malloc(sizeof(int)); p=5; printf("%s\n",strerror(errno)); ...

Код работает не так, как надо
Нужно ввести строку и слово и чтобы выводились порядковые номера слов в строке, совпадающих с...

Почему код не работает
#include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node* next;...

7
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
19.02.2015, 19:31 2
Misha_prog, (int*) представляет число 76 в виде указателя на тип int (если я правильно понимаю). Не знаю точно, но думаю, что именно так выглядит указатель в виде целого числа
1
Эксперт С++
3069 / 1407 / 425
Регистрация: 19.01.2009
Сообщений: 3,853
19.02.2015, 20:05 3
Лучший ответ Сообщение было отмечено Misha_prog как решение

Решение

Misha_prog,
C
1
2
3
4
5
6
    // warning: assignment makes integer from pointer without a cast
    int d = ((int*)20 + 56);
    printf("%d\n", d);  // 244
    // это тоже самое что
    d = 20 + 56 * sizeof(int);
    printf("%d\n", d);  // 244
1
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
19.02.2015, 21:28  [ТС] 4
schdub, Спасибо огромное!!!! я это как то на парах упустил из виду..... а не могли бы вы подсказать где про такие приведения и почему они происходят можно почитать ? То просто на мой взгляд такое поведение не совсем интуитивно понятно... или это это как то просто нужно запомнить как аксиому ?
Спасибо ещё раз!!!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11890 / 7263 / 1720
Регистрация: 25.07.2009
Сообщений: 13,293
19.02.2015, 23:51 5
Misha_prog, про адресную арифметику почитайте. У тех же Кернигана и Ритчи вполне доходчиво...
1
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
20.02.2015, 04:21 6
Misha_prog, в С можно виды неявно приводить с помощью вот таких скобочек перед переменной. Например:
C
1
2
float P = 3.14;
int I = (int)P; // Представили P в виде типа int, потому в I запишется только 3, дробная часть отбросится
то же самое наоборот
C
1
2
int K = 3;
float P = K/2; // Скорее всего выдаст некорректный результат, поскольку оба числа целых
а вот
C
1
2
int K = 3;
float P = (float)K/2.0; // Сработает корректно, потому что теперь К не 3, а 3.00
1
Эксперт С++
3069 / 1407 / 425
Регистрация: 19.01.2009
Сообщений: 3,853
20.02.2015, 12:08 7
Misha_prog, это самые основы работы с указателями в С.
C
1
2
3
4
5
6
    int* ptr = (int*) 20;
    printf("%d\n", ptr); // числовое значение ptr=20
    ptr = ptr + 1;       // увеличиваем значение ptr на 1*sizeof(int)
    printf("%d\n", ptr); // числовое значение ptr=24
    ptr = ptr + 55;      // увеличиваем значение ptr на 55*sizeof(int)
    printf("%d\n", ptr); // ptr=244
Кстати, на хабре сегодня статья вышла: Указатели, ссылки и массивы в C и C++: точки над i.
1
0 / 0 / 1
Регистрация: 15.04.2013
Сообщений: 184
20.02.2015, 18:04  [ТС] 8
огромное спасибо, кажется я всё понял!!! за статью отдельное спасибо!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2015, 18:04
Помогаю со студенческими работами здесь

Почему этот код работает?
Добрый день. Столкнулся с тем, что код ниже не приводит к ошибкам при работе. Не могу понять,...

Почему приведенный код не работает?
Что с эти кодом почему он не хочет работать? #define _CRT_SECURE_NO_WARNINGS #include...

почему этот код не работает правильно !
программа что Вычисляет и выводит десятичное значение каждого из чисел, является записью числа в...

Код работает не так, как ожидается (найти и исправить ошибки)
#include <stdio.h> #include <conio.h> #include <string.h> char deletika(char a, long ot, long...

почему не работает код для вычисления суммы ряда?
вот мой код: #include <stdio.h> #define _USE_MATH_DEFINES #include <math.h> #include...

Проверка, есть ли заданная фамилия в телефонной книжке (почему код не работает?)
Почему данный код окботает лишь до ошибки , текстовый документ есть(( Цель программы: Ввод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru