статическая типизация - тип связан не со значением, а с именем. типизируются имена в динамически типизированных языках имя может соответствовать различным типам в разных точках исполнения программы
адрес это расстояние от начала памяти до переменной минимально адресуемая ячейка - char

В C объявление int main() без параметров технически значит, что функция может принимать любое число параметров (неявно), а int main(void) явно означает отсутствие параметров.
сигнатура функции это: возвращаемый тип + типы всех аргументов для вызова определение не нужно
тип данных это множество его значений и множество допустимых операций над этими значениями