Ответы на ваши вопросы в основном можно отрыть в стандарте языка, или путем нескольких месяцев практического решения задач, без этого моя болтовня вам понимания не добавит.
Попытки сразу охватить все тонкости языка гарантируют вам скорее депрессию, чем знания, так что для начала, наберитесь опыта в решении несложных задач и понимании синтаксиса, а уже потом начинайте приставать к тому
"каким синтаксисом лучше инициализировать массив". Практически всегда, чтобы вы ни понаписали при инициализации статических данных, на выходе у вас будет одно и тоже.
1) Какая ошибка? Почему любители задавать вопросы по C++ думают, что у каждого программиста в голове компилятор?
2) Нет, у примитивных типов нет конструкторов и методов
3) Если коротко, так как int - примитивный тип, у вас все случаи в итоге выражают одно и тоже - объявление и определение одновременно с инициализацией.
4) Наверное, вы уже поняли, что использовать везде int - плохая возможность для иллюстрации.
5) void* - это какой-то адрес в памяти. Так как C++ работает в том числе и низкоуровневыми данными, это задача программиста верно интерпретировать то, что находится в памяти по этому адресу. Огромное количество системных функций из POSIX или WINAPI, или OpenGL будут возвращать вам такой указатель.
6) Потому что они ведут себя разным образом. k = 8; p = 8; a = 13; k+=++a; a=13; p+=a++; /*k=22; p=21*/;
Поэтому нужны оба.
7)Потому что так написано в стандарте - sizeof пустой фигни = sizeof(char)
8) std всегда с вами.
9) как реализовали разработчики компилятора
10) как реализовали разработчики компилятора