结构体指针初始化以及结构体变量作为函数实参传递时易混淆的知识点
首先要明确,结构体类型是用户自己定义的一种数据类型,其本质上与int
, char
等标准数据类型是一致的
**1.**因此,在进行结构体指针的初始化时,应该这样写:
# include <iostream>
using namespace std;
int main()
{typedef struct{int number; //学号char sex; //性别 }stu;
stu x;
stu *p1=&x; //定义结构体指针p1并初始化int a[3] = {1,2,3};int *p2=a;cout<<*p2<<endl;return 0;
}
即stu *p1=&x;
,而不应该写成stu *p1=x
.前面已经说了,结构体类型是用户自己定义的一种数据类型,其本质上与int、char
等标准数据类型是一致的,故结构体指针变量名并不代表结构体变量首地址,在对结构体指针进行初始化时要用& 结构体变量名
指出地址,数组指针在初始化时这样写:int *p2=a;
,是因为数组名代表数组首地址。
2. 结构体变量作为函数实参传递时
···
void fun(stu student1)
{
…
}
int main()
{
…
stu student2; //定义结构体变量
fun(student2);
return 0;
}
···
形参是结构体变量名,故传给函数的实参是结构体变量名,它不代表结构体变量占用内存空间的首地址。