我有一個奇怪的問題。我有一個練習練習指針,結果會根據cout語句的順序而有所不同。根據我首先想到的兩個結構變量,它們會以不同的方式出現。更具體地說,struct Student有兩個變量,名稱和gpa。設置變量後,如果我cout gpa然後名稱,gpa是好的,名稱不是;如果我的名字是gpa,名字很好,而gpa不是。任何想法爲什麼?cout結構中變量的cout順序改變內容?
這是代碼,有名字,那麼GPA輸出:
#include <iostream>
#include <iomanip>
using namespace std;
struct Student
{
char * name;
float gpa;
};
Student *createStudent(char name[], float gpa);
int main()
{
int MAX = 100;
float stuGpa = 0;
char *stuName = new char[MAX];
cout << fixed << setprecision(2);
stuName = "fubar";
stuGpa = 4.0;
Student *student1;
student1 = new Student;
student1 = createStudent(stuName, stuGpa);
// cout name (first)
cout << "\nStudent name is " << student1->name;
// cout gpa (second)
cout << "\nStudent gpa is " << student1->gpa;
return 0;
}
Student *createStudent(char name[], float gpa)
{
int length = strlen(name);
Student newStudent;
newStudent.gpa = gpa;
newStudent.name = new char[length];
newStudent.name = name;
return &newStudent; //return the address of the newly created student
}
我的輸出:
Student name is fubar
Student gpa is 0.00
如果我扭轉COUT語句,輸出爲
Student gpa is 4.00
Student name is
任何想法爲什麼cout順序影響結構變量的內容?
你應該確實閱讀[編譯器警告](http://melpon.org/wandbox/permlink/mFk7JIrfAqvNwBYc) –