Я только что достиг указателей в своем учебнике, но это не объясняет достаточно хорошо, поэтому мне нужна помощь.Попугался с указателями на C
Я знаю, что такое указатели и что они делают. например, я очень хорошо понимаю следующий пример:
#include <stdio.h>
int main()
{
int num = 5;
int *point;
point = #
*point = 8;
printf("%d %d", num, *point);
return 0;
}
Точка указывает на число (сохраняя адрес num в качестве значения). а затем я разыскиваю точку, чтобы изменить исходное значение num.
Рассмотрим теперь красивый модифицированную версию того же примера:
#include <stdio.h>
int main()
{
int num = 5;
int *point;
point = 8;
printf("point: %d\n", point);
printf("sum (%d) = num (%d)+ point (%d)", num+point, num, point);
return 0;
}
У меня есть несколько вопросов:
1- почему даже можно назначить нормальное значение (8) к указателю (точке)? не указатели должны хранить только адреса других вещей? что происходит в строке 8?
2- я скомпилировал код и для второго printf он показывает: sum (28) = num (5) + point (8) Почему сумма равна 28? 5 + 8 - 13. Что происходит?
Разве ваш компилятор не жалуется на вторую программу? gcc дает 4 отдельных предупреждения при компиляции кода. –
Я использую Code :: Blocks с mingw32 и компилируется с предупреждениями ... но он компилируется. В любом случае, я мог бы использовать некоторые ответы на мои вопросы. – ufosecret
Дело в том, что код создает неопределенное поведение. Есть упрощенные ответы о том, как указатели похожи на ints, но такие ответы не совсем правильные, и правда многое зависит от подробного чтения языкового стандарта. –