吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 964|回复: 15
收起左侧

[求助] 关于c++的语法格式问题

  [复制链接]
gedada2019 发表于 2022-4-26 08:29
25吾爱币
struct Teacher tArray[]在void allocateSpace函数已近定义了,为什么在void printInfo中还要用struct Teacher tArray[],而不是直接写tArray[]
[C++] 纯文本查看 复制代码
#include<iostream>
using namespace std;
#include<string>
#include<ctime>
//学生的结构体
struct Student
{
	//姓名
	string sName;
	//分数
	int score;
};

//老师的结构体定义
struct Teacher
{
	//姓名
    string tName;
	//学生数组
	struct Student sArray[5]; 
};
//给老师和学生赋值的函数
void allocateSpace(struct Teacher tArray[], int len)
{
	string nameSeed = "ABCDE";
	//给老师开始赋值
	for (int i = 0; i < len; i++)
	{
		tArray[i].tName = "Teacher_";
		tArray[i].tName += nameSeed[i];
		//通过循环给每名老师所带的学生赋值
		for (int j = 0; j < 5; j++)
		{
			tArray[i].sArray[j].sName = "Student_";
			tArray[i].sArray[j].sName += nameSeed[j];
			int random = rand() % 61 + 40;//40~100
			tArray[i].sArray[j].score = random;
		}
		
	}
}
//打印所有信息
void printInfo(struct Teacher tArray[], int len)
{
	for (int i = 0; i < len; i++)
	{
		cout << "老师姓名:" << tArray[i].tName << endl;
		for (int j = 0; j < len; j++)
		{
			cout << "\t学生姓名:" << tArray[i].sArray[j].sName <<
				"考试分数:"<<tArray[i].sArray[j].score<< endl;
		}
	}
}
int main()
{
	//随机数种子
	srand((unsigned int)time(NULL));
	//1、创建3名老师的数组
	struct Teacher tArray[3];
	//2、通过函数给3名老师的信息赋值,并给老师带的学生信息赋值
	int len = sizeof(tArray) /sizeof(tArray[0]);
	allocateSpace(tArray,len) ;
	//3、打印所有老师及学生所带的信息
	printInfo(tArray, len);
	system("pause");
	return 0;
}

最佳答案

查看完整内容

作用域啊,你在一个函数里声明的变量在另一个函数里当然没有要重新声明,出了这个函数就不管用了

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zTATs 发表于 2022-4-26 08:29
作用域啊,你在一个函数里声明的变量在另一个函数里当然没有要重新声明,出了这个函数就不管用了
FYangish 发表于 2022-4-26 09:13
plauger 发表于 2022-4-26 09:18
你要搞清楚“声明”和“定义”的概念,在你这个例子中,只有main函数里的struct Teacher tArray[3];才是真正的定义,在allocateSpace和printInfo参数表中出现的struct Teacher tArray[]只是声明,声明该参数是struct Teacher数组.
JuncoJet 发表于 2022-4-26 09:49
怎么和你说呢,你这个定义的时候还没有实例化
NoPower 发表于 2022-4-26 11:10
你不指定形参的类型,编译器怎么知道你要传什么数据进去?
NoPower 发表于 2022-4-26 11:16
NoPower 发表于 2022-4-26 11:10
你不指定形参的类型,编译器怎么知道你要传什么数据进去?

但是也不一定不能编译过,有的编译器可能会默认指定形参的类型。
另外,这里的参数是形参,这里的名字跟你前面的定义虽然用的同一个词但是压根没关系。
hjxhjxjx 发表于 2022-4-26 12:20
你这个是函数内定义,不是全局的
tester001 发表于 2022-4-26 19:26
函数括号后的是形参,只是声明了这个变量而已。
 楼主| gedada2019 发表于 2022-4-27 15:04
plauger 发表于 2022-4-26 09:18
你要搞清楚“声明”和“定义”的概念,在你这个例子中,只有main函数里的struct Teacher tArray[3];才是真 ...

那为什么allocateSpace(tArray,len) ;
里面只用写tArray?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 12:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表