Qubc
@Qubc
Ненавижу полисемию.

Почему нельзя передать char * suit [ ] в void deal ( const char * duit [ ] )?

#include <stdio.h>
void A( char * ptr []  );
void B( const char * ptr [] );
void C( const char * ptr );
int main() {
	char * noncon [4] = { "Hearts", "Diamonds" }; //Массив не-константных указателей
    A( noncon );//отправляется в функцию, чтобы использоваться там.
	
	const char * con [4] = { "Cats", "Dogs" };//Массив константных указателей
	B( con );//отправляется в функцию, чтобы использоваться там.
		
	char * string = "Hello";//При том, что такая строка будет находиться в памяти только для чтения и лучше делать const char * ptr = "Hello";  Причем тогда в параметрах функции const станет обязательным!
	C( string );//В текущем виде не-констатный указатель передается в константный параметр.

	const char variable = 'A';
	C( &variable );//Передача не-констатной переменной в константный параметр не является ошибкой. 

	//B( noncon );//Почему-то возникает ошибка при передаче не-константного массива указателей в константный параметр?
}
void A(       char * ptr[] ) {
	printf ("%.10s\n", ptr[0] );
}
void B( const char * ptr[] ) {
	printf ("%.10s\n", ptr[0] );
}
void C( const char * ptr   ) {
	printf ("%.10s\n", ptr    );
}
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vanyamba-electronics
const char* duit [] - это массив элементов типа char*. Вот поэтому и нельзя.
Сделайте так:
void deal (const char duit[]);
Ответ написан
Комментировать
EgoRusMarch
@EgoRusMarch
C++ Developer
Писать в параметрах квадратные скобки вообще нерационально. Массивы по значению не передаются.
void deal(const char *duit[]) тоже самое, что и void deal(const char **duit)

Всё компилится: https://ideone.com/aFC3Gl
Хотя, конечно, лучше писать const, потому что строковые литералы имеют тип const char.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы