当我需要在函数中传递值时,我对结构感到困惑
#include <iostream>
using namespace std;
struct student
{
int studentID;
char studentName[30];
char nickname[10];
};
void read_student(struct student *);
void display_student(struct student *);
int main()
{
student *s;
//struct student *ps;
read_student(s);
display_student(s);
}
void read_student(struct student *ps)
{
int i;
for (i = 0; i <= 2; i++)
{
cout << "Enter the studentID : ";
cin >> ps->studentID;
cout << "Enter the full name :";
cin.ignore();
cin >> ps->studentName;
cout << "Enter the nickname : ";
cin.ignore();
cin >> ps->nickname;
cout << endl;
}
}
void display_student(struct student *ps)
{
int i;
cout << "student details :" << endl;
for (i = 0; i <= 2; i++)
{
cout << "student name : " << *ps ->studentName << " (" << &ps ->studentID << ")" << endl;
ps++;
}
}
它唯一的问题在第19行的变量,当我试图编辑它将成为更多的问题
student *s;
//struct student *ps;
//struct student *ps;
read_student(s);
display_student(s);
也可以有人解释如何将结构的指针值传递给函数,并将其返回给主函数
1条答案
按热度按时间2lpgd9681#
你正在忍受着C语言时代的一些残余。而且,你还不明白指针是如何工作的。
一个指针(就像它的名字说的那样)指向某个东西。在main中,你定义了一个student指针。但是它没有初始化。它指向某个地方。如果你从某个地方读取数据,那么它是未定义的行为。对于写,它是相同的,而且系统很可能会崩溃。
所以,定义一个学生,如果你想把它给一个子函数,用&-运算符取它的地址(这个地址将指向学生),然后它就可以工作了。
你还需要学习解引用。你的输出语句是错误的。
最后但并非最不重要的是,如果你想存储3个学生,那么你需要一个阵列或其他一些存储在哪里把他们. . .
在读取功能中,您总是覆盖先前读取的学生数据,在显示功能中,您显示未确定的数据。
请看一看您的最小更正代码:
而且,评论者是对的,你必须读一本书。