The_Unknown_Member Ответов: 1

[C++] передача пользовательского типа (структуры) функции


Привет. Я экспериментировал с этим и обнаружил странное поведение, которое не могу понять.
Рассмотрим этот код:
#include "stdafx.h"

void passStructAsParam(Student s);

struct Student
{
	int rollno;
	char gender;
	int age;
};



int main()
{
	Student s; 
	s.rollno = 40;
	s.gender = 'm';
	s.age = 20;

	passStructAsParam(s);

	return 0;
}

void passStructAsParam(Student s)
{
	printf("%d \n", s.rollno);
	printf("%c \n", s.gender);
	printf("%d \n", s.age);
}

Этот код не будет работать, потому что структура определяется после объявления функции, но если я это сделаю:
#include "stdafx.h"

void passStructAsParam(struct Student s);

struct Student
{
	int rollno;
	char gender;
	int age;
};



int main()
{
	Student s; 
	s.rollno = 40;
	s.gender = 'm';
	s.age = 20;

	passStructAsParam(s);

	return 0;
}

void passStructAsParam(struct Student s)
{
	printf("%d \n", s.rollno);
	printf("%c \n", s.gender);
	printf("%d \n", s.age);
}

Это прекрасно работает. Поэтому возникает вопрос: почему, когда я прямо пишу, что студент-это структура в списке параметров функции, она работает, а если я этого не делаю, то нет ?

Что я уже пробовал:

Задавая вопрос здесь в CodeProject.com

Richard MacCutchan

В чем заключается ошибка, которую вы видите? Кроме того, вы не должны передавать полные структуры в качестве параметров, это крайне расточительно. Пройдите по адресу или ссылке.

1 Ответов

Рейтинг:
4

Jochen Arndt

При использовании struct ключевое слово в объявлении функции у вас есть так называемое " прямое объявление":

// Forward declaration
// Definition must be present later in this scope 
struct Student;

// Can now use the forward declaration within other declarations
void passStructAsParam(Student s);
 
// Final definition of structure
struct Student
{
	int rollno;
	char gender;
	int age;
};
Я переместил вперед объявление из объявления функции, чтобы объяснить, что происходит.


The_Unknown_Member

Спасибо!