Во-первых, хорошая новость: тип a
эквивалентен char **
, поэтому вы передаете действительный параметр myFunc()
.
Первая проблема заключается в том, что %c
- это спецификатор формата, который означает печать одного символа. Поскольку **P
является выражением, которое оценивается одним символом, ваша первая версия делает именно то, что вы сказали. Это не то, что вы хотите.
Вторая версия близка к синтаксически правильной. Он должен читать printf("%s", *P)
, где *P
- это выражение, которое оценивает указатель на строку ASCII с нулевым символом в конце. В этом случае он оценивает «Do». Эта версия не будет печатать обе строки.
Хотя верно, что имя массива совпадает с указателем на его первый элемент, это своего рода «ложь студентам». Передача массива в функцию не передает и не может передать длину массива. Чтобы сделать это, вам нужен либо второй аргумент, содержащий длину, либо соглашение, например, nul-terminator в строке, чтобы указать конец массива. С этим изменением вы можете изменить myFunc()
, чтобы использовать цикл над переданными элементами и печатать каждый из них.