至于为什么结构体这部分会在指针后面,我猜测可能是因为这里有一个结构体指针的原因吧;
1:定义:
struct+变量名{}变量名(可无);
2:给结构体变量赋值;
#includeusing namespace std; struct student { string name; int age; }stu3; int main() { struct student stu1; stu1.name = "zhangsan"; stu1.age=18;//第一种结构体赋值方法 struct student stu2 = { "zhangsan",18 };//第二种结构体赋值方法 stu3.name = "zhangsan"; stu3.age = 18;//第三种结构体赋值方法 }
普通结构体的赋值方法都是结构体比变量的名字加点加内部变量名然后赋值;下面我们会讲到结构体指针的另一种写法;
3:结构体数组
#includeusing namespace std; struct student { string name; int age; }stu[2]; int main() { struct student stu[2] = { {"zhangsan",18}, {"lisi",18}, };//一般而言我们都不会使用这种赋值方法;而是采用循环遍历赋值 }
4:结构体指针:写一个结构体,开一个指针指向这个结构体即可
#includeusing namespace std; struct student { string name; int age; }; int main() { struct student st; st.name = "zhangsan"; st.age = 18; student * p = &st; cout << p->name << ' ' << p->age << endl; }
这里我们查看结构体里面的变量的时候,我们使用的是->来查看,但其实你打一个点也可以,有些编译器是会帮助你自动改变的,比如VS2022;
5:结构体做函数参数:
#includeusing namespace std; struct student { string name; int age = 0; }; void stud1(struct student t)//这里写的是一个函数体,但是没有语句 { t.age = 19; }//这个是值传递,不可改变原结构体内容 void stud2(struct student * t) { t->age = 17; }//这个是地址传递,可以改变原结构体内容 int main() { struct student stu = { "zhangsan", 18 }; }
c++有时候规范的吓人,比如我上面的结构体做参数,我写成了一个声明,没有写具体的语句,他就不让我编译通过;
6:const修饰结构体:一般来说,我们使用结构体传参时都不会考虑用值传递。因为值传递会复制出一个完全一样的结构体,包括所有变量,这会造成空间的大量使用,而且我们一般不会大面积去修改结构体的值,这时候我们一般考虑值传递,并且加一个const来防止被修改,这样我们就可以在不用复制出另一个结构体的情况下查看这个结构体的变量与内容
#includeusing namespace std; struct student { string name; int age = 0; }; void stud2(const struct student * t) { cout << t->name << ' ' << t->age << endl; }//这个是地址传递,可以改变原结构体内容 int main() { struct student stu = { "zhangsan", 18 }; stud2(&stu);//记得不要忘记加地址符号 }



