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

Что происходит при вызове printf() с аргументом-структурой?

#include <stdio.h>
struct card 
{
	char * face;
	char * suit;
};
int main( void )
{
	struct card aCard = { "Three", "Hearts" };	
	printf( "%s %s %s\n", aCard, aCard.face, aCard.suit );//Three Hearts Three
	printf( "%s\n", aCard  );//Three;  
	printf( "%s\n", aCard.face );//Three;  
	printf( "%s\n", aCard.suit );//Hearts;  
}
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
wisgest
@wisgest
Не ИТ-специалист
Потому что. если
struct {char *face, *suit;} aCard = {"Three", "Hearts"};

, то
printf("pattern",..., aCard,...);
равносильно
printf("pattern",..., aCard.face, aCard.suit,...);
— На стек размещается структура из двух указателей, т. е. просто два указателя. Последний аргумент (aCard.suit в первом вызове printf в вопросе) оказывается лишним.

Например,
printf("%s %s\n", aCard);
выдаст
Three Hearts
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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