構造体と関数とポインタ渡し

#include <iostream>
#include <string>
 
 
using std::string;
using std::cin;
using std::cout;
using std::endl;
 
//一人の学生の成績
struct gradePoint
{
	string name; //学生の名前
	int number;//学籍番号
	int course[5];//科目(5科目)
	//0:国語 1:算数 2:理科 3:社会 4:英語
};
 
 
//プロトタイプ宣言
void setStudentStatus(gradePoint _stu, string _name,int _stunum,
						int koku, int su, int rika, int shakai, int eigo);
void printStudent(gradePoint _stu);
 
 
 
//関数定義
void setStudentStatus(gradePoint _stu, //パラメタをセットする学生を表す構造体
	                  string _name,  //学生名
	                  int _stunum,   //学籍番号
					  int koku, int su, int rika,int shakai, int eigo )//各教科得点
{
	_stu.name = _name;			//名前をセット
	_stu.number = _stunum;		//学籍番号をセット
	_stu.course[0] = koku;		//国語の点数
	_stu.course[1] = su;		//算数の点数
	_stu.course[2] = rika;		//理科の点数
	_stu.course[3] = shakai;	//社会の点数
	_stu.course[4] = eigo;		//英語の点数
}
 
void printStudent(gradePoint _stu)
{
	cout << "---------------------------" << endl;
	cout << "  名前: " << _stu.name << endl;
	cout << "学籍番号: " << _stu.number << endl;
	cout << "    国語: " << _stu.course[0] << endl;
	cout << "    算数: " << _stu.course[1] << endl;
	cout << "    理科: " << _stu.course[2] << endl;
	cout << "    社会: " << _stu.course[3] << endl;
	cout << "    英語: " << _stu.course[4] << endl;
	cout << "---------------------------" << endl;
}
 
int main()
{
	gradePoint sato;
	sato.name = "sato";
	sato.number = 100100;
	sato.course[0] = 40;
	sato.course[1] = 60;
	sato.course[2] = 70;
	sato.course[3] = 80;
	sato.course[4] = 100;
	printStudent(sato);
}

構造体型の変数を作って、関数経由で値をセットしてみる

int main()
{
	gradePoint stu[5];
	setStudentStatus(stu[0], "佐藤", 1000, 60, 50, 40, 30, 20);
	setStudentStatus(stu[1], "伊藤", 1000, 60, 50, 40, 30, 20);
	setStudentStatus(stu[2], "工藤", 1000, 60, 50, 40, 30, 20);
	setStudentStatus(stu[3], "須藤", 1000, 60, 50, 40, 30, 20);
	setStudentStatus(stu[4], "加藤", 1000, 60, 50, 40, 30, 20);
	for(int i=0;i<5;i++)
		printStudent(stu[i]);
	//①gradePoint型の変数をいくつか作る(配列?)
	//②setStudentStatusを使って、値をセット
	// 	セットする値はなんでもええのよ
	//③printStudentで表示する
	//何が悪いか考えて治す!(②を直す)(何なら③も)
}

構造体をアドレス渡しにすることによってちゃんと動く版

#include <iostream>
#include <string>
 
 
using std::string;
using std::cin;
using std::cout;
using std::endl;
 
//一人の学生の成績
struct gradePoint
{
	string name; //学生の名前
	int number;//学籍番号
	int course[5];//科目(5科目)
	//0:国語 1:算数 2:理科 3:社会 4:英語
};
 
 
//プロトタイプ宣言
void setStudentStatus(gradePoint* _stu, string _name, int _stunum,
	int koku, int su, int rika, int shakai, int eigo);
void printStudent(gradePoint *_stu);
 
 
 
//関数定義
void setStudentStatus(gradePoint* _stu, //パラメタをセットする学生を表す構造体
	string _name,  //学生名
	int _stunum,   //学籍番号
	int koku, int su, int rika, int shakai, int eigo)//各教科得点
{
	_stu->name = _name;			//名前をセット
	_stu->number = _stunum;		//学籍番号をセット
	_stu->course[0] = koku;		//国語の点数
	_stu->course[1] = su;		//算数の点数
	_stu->course[2] = rika;		//理科の点数
	_stu->course[3] = shakai;	//社会の点数
	_stu->course[4] = eigo;		//英語の点数
}
 
void printStudent(gradePoint *_stu)
{
	cout << "---------------------------" << endl;
	cout << "  名前: " << _stu->name << endl;
	cout << "学籍番号: " << _stu->number << endl;
	cout << "    国語: " << _stu->course[0] << endl;
	cout << "    算数: " << _stu->course[1] << endl;
	cout << "    理科: " << _stu->course[2] << endl;
	cout << "    社会: " << _stu->course[3] << endl;
	cout << "    英語: " << _stu->course[4] << endl;
	cout << "---------------------------" << endl;
}
 
int main()
{
	gradePoint stu[5];
	setStudentStatus(stu + 0, "佐藤", 1000, 60, 50, 40, 30, 20);
	setStudentStatus(stu + 1, "伊藤", 1001, 60, 50, 40, 30, 20);
	setStudentStatus(stu + 2, "工藤", 1002, 60, 50, 40, 30, 20);
	setStudentStatus(stu + 3, "須藤", 1003, 60, 50, 40, 30, 20);
	setStudentStatus(stu + 4, "加藤", 1004, 60, 50, 40, 30, 20);
	for (int i = 0; i < 5; i++)
		printStudent(stu + i);
	//①gradePoint型の変数をいくつか作る(配列?)
	//②setStudentStatusを使って、値をセット
	// 	セットする値はなんでもええのよ
	//③printStudentで表示する
	//何が悪いか考えて治す!(②を直す)(何なら③も)
}

構造体の実際のサイズを調べる

sizeof演算子を使う
Σ(構造体のメンバ)(=メンバ変数のサイズ合計)には、ならないので注意!
システムで決められた大きさのブロックで大きめに取られます。
ブロックサイズはググってみてね。

	cout << "構造体のサイズは:" 
		<<  sizeof(gradePoint) << "byte" << endl;
	cout << "構造体のサイズは:"
		<< sizeof(stu[2]) << "byte" << endl;
	cout << "intのサイズは:"
		<< sizeof(int) << "byte" << endl;
	cout << "floatのサイズは:"
		<< sizeof(float) << "byte" << endl;
	cout << "doubleのサイズは:"
		<< sizeof(double) << "byte" << endl;