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    );
}
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vanyamba-electronics
const char* duit [] - это массив элементов типа char*. Вот поэтому и нельзя.
Сделайте так:
void deal (const char duit[]);
Ответ написан
Комментировать
EgoRusMarch
@EgoRusMarch
Писать в параметрах квадратные скобки вообще нерационально. Массивы по значению не передаются.
void deal(const char *duit[]) тоже самое, что и void deal(const char **duit)

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

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

Войти через центр авторизации
Похожие вопросы