В чём отличие между char* и char[]?
Разница в том, что в первом случае компилятор видит, что строковые литералы одинаковы, и генерирует только одну строку, и присваивает str1 и str2 указатели на неё. Во втором случае он не может так сделать, потому что массивы не константны, и в дальнейшем могут изменяться независимо. Поэтому указатели разные.
Однако в общем случае поведение такого кода полностью зависит от реализации компилятора и от опций, поэтому лучше так не делать вообще. Clang пишет: array comparsion always evaluates to false.
В случае выделения на стеке или в глобальных переменных - разница очень большая. char* - это просто указатель. Как тут правильно сказали - у вас будет два указателя на один и тот же строковый литерал.char[] - создание массива на стеке. Соответственно, у  вас там будут хранится не два указателя, а два массива. Вы сравниваете их и они очевидно не равны.
Вот пример: https://ideone.com/pIhUvq. Как видите, в одном случае у нас 64-битный указатель, а в другом - массив.
А вот в параметрах функции - действительно, большой разницы нет.