Есть ли разница между char* и char[число] при передаче аргументов функции?
Разницы нет. Вообще, принято скобки писать просто пустыми, без числа. Но в идеале, чисто стилистически для повышения читаемости, когда передаётся указатель, пишется указатель, а когда передаётся массив, пишется массив.
Вот пример:
Обычно пишут такint main(int argc, char *argv[])
Но это можно записать и такint main(int argc, char **argv)
Так как разницы нет.
Но пишут первым способом, чтобы подчеркнуть для читателя исходника, что там массив указателей, а не просто указатель на указатель какой-то непонятный (можно его двигать, или нельзя его двигать - неясно). А в первом варианте читателю сразу понятно, что там можно применять argv++, так как движение по массиву происходит.
Компилятор скорее всего ругаться не будет, но ты можешь зато использовать sizeof, хотя это достаточно спорный момент, т.к. всё равно в аргументах есть явный размер.
Не помню чтобы реально хоть раз была практическая необходимость "передавать" массив заранее известного размера. Только если этот массив, какие-нибудь координаты или пара значений.